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

Java Eclipse:基于所选项目的组合框操作按钮(例如,温度转换),java,swing,combobox,Java,Swing,Combobox,我是Java新手,目前正在使用JavaEclipse进行练习。我在comboBox中遇到了一些问题,我不知道如何让程序根据从两个comboBox中选择的项目执行某些操作。我有两个用于转换温度的组合框(摄氏度、华氏度、开尔文),我设法添加了这些项。我被转换按钮卡住了。我的意图是,如果combobox1=摄氏度,combobox2=华氏度,则使用此计算并将其作为华氏度值输出到textField_1。你能帮我明确地告诉我怎么做吗?非常感谢你的帮助。非常感谢你!我尝试过搜索类似的东西,但我找不到一个和我

我是Java新手,目前正在使用JavaEclipse进行练习。我在comboBox中遇到了一些问题,我不知道如何让程序根据从两个comboBox中选择的项目执行某些操作。我有两个用于转换温度的组合框(摄氏度、华氏度、开尔文),我设法添加了这些项。我被转换按钮卡住了。我的意图是,如果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,这些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();
                        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 (temperature.equals("Celsius")) {
                    if (convertTemp.equals("Fahrenheit")) {
如果在第二个框中选择了华氏度

                if (temperature.equals("Celsius")) {
                    if (convertTemp.equals("Fahrenheit")) {
然后这个动作就会发生

        class ConvertHandler implements ActionListener {
            public void actionPerformed(ActionEvent e) {
                String temperature = (String) fromCombo.getSelectedItem();
                String convertTemp = (String) toCombo.getSelectedItem();
                        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);
                    }
                }
            }
        }
    }
}

我用了很多if来做这件事,可能有更短的方法,但这是我的方法。我希望它能有所帮助。

好吧,你应该从制作一个
动作监听器开始。在这个
ActionListener
对象中,您可以生成许多if,这些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();
                        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 (temperature.equals("Celsius")) {
                    if (convertTemp.equals("Fahrenheit")) {
如果在第二个框中选择了华氏度

                if (temperature.equals("Celsius")) {
                    if (convertTemp.equals("Fahrenheit")) {
然后这个动作就会发生

        class ConvertHandler implements ActionListener {
            public void actionPerformed(ActionEvent e) {
                String temperature = (String) fromCombo.getSelectedItem();
                String convertTemp = (String) toCombo.getSelectedItem();
                        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);
                    }
                }
            }
        }
    }
}

我用了很多if来做这件事,可能有更短的方法,但这是我的方法。我希望这是有帮助的。

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));
}

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));
}

快速浏览代码似乎表明您正朝着正确的方向前进,您遇到了什么问题?试试这个。让程序员发疯。我在textfield中输入了一个值,然后将我的combobox选择为“摄氏度”,将combobox1选择为“华氏度”,然后单击我的转换按钮,除了控制台的错误消息出现“未解决的编译问题”,什么都没有发生(线程AWT eventQueue中出现异常。我的程序识别了我添加的所有项目,因为我的组合框确实显示了所有温度名称,但由于某些原因,它不会根据选择的名称进行计算。谢谢。谢谢,垃圾神。我将尝试一下。快速浏览代码似乎表明您的方向正确,看到了什么ms是您遇到的问题吗?试试这个。对程序员来说。我在textfield中输入了一个值,然后将我的combobox选择为“摄氏度”,将combobox1选择为“华氏度”,然后单击我的转换按钮,除了控制台的错误消息显示“未解决的编译问题”,什么都没有发生(线程AWT eventQueue中出现异常。我的程序识别了我添加的所有项目,因为我的组合框确实显示了所有温度名称,但由于某些原因,它不会根据选择的名称进行计算。谢谢。谢谢,垃圾神。我会试试看。