Java Eclipse:基于所选项目的组合框操作按钮(例如,温度转换)



我是Java的新手,目前正在使用Java Eclipse进行练习。我在使用组合框时遇到了一些问题,我不确定如何根据从两个组合框中选择的项目使程序做一些事情。我有两个用于转换温度的组合框(摄氏度、华氏度、开尔文),我设法添加了这些项目。我被困在转换按钮上。我的目的是如果 combobox1 = 摄氏度,并且 combobox2 = 华氏度,则使用此计算和输出作为华氏值textField_1。你能帮我明确地如何做到这一点吗? 非常感谢您的帮助。非常感谢! 我尝试过搜索类似的东西,但我找不到一个像我一样的东西,而其他人使用 netbeans 并且完全不同。

        JButton btnNewButton = new JButton("Convert");//converts temperature input to output based on the comboBox and comboBox1 selections. 
    btnNewButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {

            String inputTemp = (String)comboBox.getSelectedItem();
            String inputTemp1 = (String)comboBox_1.getSelectedItem();
            double inputTemp, inputTemp1, Celsius, Fahrenheit, Kelvin;
            inputTemp=Double.parseDouble(textField.getText());
            if (inputTemp.equals("Celsius") && inputTemp1.equals("Fahrenheit")) {
                Celsius = inputTemp;
            Fahrenheit = (Celsius*1.8)+32;
            textField_1.setText(Double.toString(Fahrenheit));
        }else{JOptionPane.showMessageDialog(null, "Invalid value.");
            }
        }
    });
    btnNewButton.setFont(new Font("Times New Roman", Font.PLAIN, 13));
    btnNewButton.setBounds(335, 64, 89, 103);
    frame.getContentPane().add(btnNewButton);
    textField_1 = new JTextField();
    textField_1.setBounds(41, 129, 147, 38);
    frame.getContentPane().add(textField_1);
    textField_1.setColumns(10);
    JComboBox comboBox = new JComboBox();
    comboBox.setBounds(198, 67, 127, 38);
    frame.getContentPane().add(comboBox);
    comboBox.addItem("Celsius");
    comboBox.addItem("Fahrenheit");
    comboBox.addItem("Kelvin");
    JComboBox comboBox_1 = new JComboBox();
    comboBox_1.setBounds(198, 129, 127, 38);
    frame.getContentPane().add(comboBox_1);
    comboBox_1.addItem("Celsius");
    comboBox_1.addItem("Fahrenheit");
    comboBox_1.addItem("Kelvin");

好吧,你应该从做一个Actionlistener开始。在这个ActionListener对象中,你可以做很多if,这给你搜索的结果。

首先是你的进口。

import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

然后制作框架。

public class StringAnswers extends JFrame {
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setSize(400, 280);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setTitle("Colored Animals");
        frame.setContentPane(new MyPanel());
        frame.setVisible(true);
        frame.getContentPane().setBackground(Color.WHITE);
    }

您的面板。

    class MyPanel extends JPanel {
        private JComboBox fromCombo, toCombo;
        private JButton convertBtn;
        private JLabel fromLabel, toLabel;
        private JTextField valueField;
        public MyPanel() {
            convertBtn = new JButton("OK");
            convertBtn.addActionListener(new ConvertHandler());
            add(convertBtn);
            fromLabel = new JLabel();
            add(fromLabel);
            toLabel = new JLabel();
            add(toLabel);
            valueField = new JTextField(10);
            add(valueField);

创建一个数组,以便轻松地将其放置在组合框中。布局。

            String[] entries = { "Celsius", "Fahrenheit", "Kelvin" };
            Font displayFont = new Font("Serif", Font.PLAIN, 21);
            fromCombo = new JComboBox(entries);
            fromCombo.setFont(displayFont);
            fromCombo.setVisible(true);
            add(fromCombo);

第二个组合框。

            toCombo = new JComboBox(entries);
            toCombo.setFont(displayFont);
            toCombo.setVisible(true);
            add(toCombo);
        }

按钮处理程序。因此,当按下按钮时,将发生此操作。

        class ConvertHandler implements ActionListener {
            public void actionPerformed(ActionEvent e) {
                String temperature = (String) fromCombo.getSelectedItem();
                String convertTemp = (String) toCombo.getSelectedItem();

如果在第一个框中选择了摄氏度。

                if (temperature.equals("Celsius")) {

如果在第二个框中选择华氏度。

                    if (convertTemp.equals("Fahrenheit")) {

然后此操作将发生。

                        String valueStr = valuefield.getText();
                        fromLabel.setText(valueStr);
                        double value = Double.parseDouble(valueStr);
                        double conv = value * 1.8 + 32;
                        String convStr = Double.toString(conv);
                        toLabel.setText(convStr);
                    }

对于每种可能的组合,这种情况都会持续一段时间。

                    if (convertTemp.equals("Kelvin")) {
                        String valueStr = valuefield.getText();
                        fromLabel.setText(valueStr);
                        double value = Double.parseDouble(valueStr);
                        double conv = value + 273;
                        String convStr = Double.toString(conv);
                        toLabel.setText(convStr);
                    }
                    if (convertTemp.equals("Celsius")) {
                        String valueStr = valuefield.getText();
                        fromLabel.setText(valueStr);
                        double value = Double.parseDouble(valueStr);
                        double conv = value;
                        String convStr = Double.toString(conv);
                        toLabel.setText(convStr);
                    }
                }
                if (temperature.equals("Fahrenheit")) {
                    if (convertTemp.equals("Fahrenheit")) {
                        String valueStr = valuefield.getText();
                        fromLabel.setText(valueStr);
                        double value = Double.parseDouble(valueStr);
                        double conv = value;
                        String convStr = Double.toString(conv);
                        toLabel.setText(convStr);
                    }
                    if (convertTemp.equals("Kelvin")) {
                        String valueStr = valuefield.getText();
                        fromLabel.setText(valueStr);
                        double value = Double.parseDouble(valueStr);
                        double conv = (value + 459.67) * 5/9;
                        String convStr = Double.toString(conv);
                        toLabel.setText(convStr);
                    }
                    if (convertTemp.equals("Celsius")) {
                        String valueStr = valuefield.getText();
                        fromLabel.setText(valueStr);
                        double value = Double.parseDouble(valueStr);
                        double conv = (value - 32) * 5/9;
                        String convStr = Double.toString(conv);
                        toLabel.setText(convStr);
                    }
                }
                if (temperature.equals("Kelvin")) {
                    if (convertTemp.equals("Fahrenheit")) {
                        String valueStr = valuefield.getText();
                        fromLabel.setText(valueStr);
                        double value = Double.parseDouble(valueStr);
                        double conv = (value * (9/5)) - 459.67;
                        String convStr = Double.toString(conv);
                        toLabel.setText(convStr);
                    }
                    if (convertTemp.equals("Kelvin")) {
                        String valueStr = valuefield.getText();
                        fromLabel.setText(valueStr);
                        double value = Double.parseDouble(valueStr);
                        double conv = value;
                        String convStr = Double.toString(conv);
                        toLabel.setText(convStr);
                    }
                    if (convertTemp.equals("Celsius")) {
                        String valueStr = valuefield.getText();
                        fromLabel.setText(valueStr);
                        double value = Double.parseDouble(valueStr);
                        double conv = value - 273;
                        String convStr = Double.toString(conv);
                        toLabel.setText(convStr);
                    }
                }
            }
        }
    }
}

我已经用很多如果来做到这一点,可能还有更短的方法,但这是我的方式。我希望它有所帮助。

TriggeredDuck的答案显示了如何执行此操作。 但是,我想提出一种处理嵌套if语句的方法。

请考虑以下枚举:

public enum Temperature {
  CELSIUS("Celsius", 1, 0),
  FARENHEIT("Farenheit", 1.8, 32),
  KELVIN("Kelvin", 1, 273);
  private String label;
  private double multiplier;
  private double offset;
  private Temperature(String label, double multiplier, double offset) {
    this.label = label;
    this.multiplier = multiplier;
    this.offset = offset;
  }
  public static Temperature parse(String label) {
    for (Temperature temp : Temperature.values()) {
      if (temp.label.equals(label)) {
        return temp;
      }
    }
    return null;
  }
  public double convert(double value, Temperature to) {
    return (((value - offset) / multiplier) * to.multiplier) + to.offset;
  }
}

然后,您可以将整个操作侦听器替换为:

public void actionPerformed(ActionEvent e) {
  Temperature from = Temperature.parse((String)fromCombo.getSelectedItem());
  Temperature to = Temperature.parse((String)toCombo.getSelectedItem());
  double value = Double.parseDouble(valueField.getText());
  fromLabel.setText(Double.toString(value));
  double converted = from.convert(value, to);
  toLabel.setText(Double.toString(converted));
}

相关内容

最新更新