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