Java Eclipse:基于所选项目的组合框操作按钮(例如,温度转换)
我是Java新手,目前正在使用JavaEclipse进行练习。我在comboBox中遇到了一些问题,我不知道如何让程序根据从两个comboBox中选择的项目执行某些操作。我有两个用于转换温度的组合框(摄氏度、华氏度、开尔文),我设法添加了这些项。我被转换按钮卡住了。我的意图是,如果combobox1=摄氏度,combobox2=华氏度,则使用此计算并将其作为华氏度值输出到textField_1。你能帮我明确地告诉我怎么做吗?非常感谢你的帮助。非常感谢你!我尝试过搜索类似的东西,但我找不到一个和我的一样的,其他人使用netbeans,而且完全不同Java Eclipse:基于所选项目的组合框操作按钮(例如,温度转换),java,swing,combobox,Java,Swing,Combobox,我是Java新手,目前正在使用JavaEclipse进行练习。我在comboBox中遇到了一些问题,我不知道如何让程序根据从两个comboBox中选择的项目执行某些操作。我有两个用于转换温度的组合框(摄氏度、华氏度、开尔文),我设法添加了这些项。我被转换按钮卡住了。我的意图是,如果combobox1=摄氏度,combobox2=华氏度,则使用此计算并将其作为华氏度值输出到textField_1。你能帮我明确地告诉我怎么做吗?非常感谢你的帮助。非常感谢你!我尝试过搜索类似的东西,但我找不到一个和我
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中出现异常。我的程序识别了我添加的所有项目,因为我的组合框确实显示了所有温度名称,但由于某些原因,它不会根据选择的名称进行计算。谢谢。谢谢,垃圾神。我会试试看。