【问题标题】:Equation answer won't output to JTextField with using CoomboBox if statments使用 ComboBox if 语句,方程答案不会输出到 JTextField
【发布时间】:2017-12-20 04:53:24
【问题描述】:

我对 Java 非常陌生,正在学习 Java 1 课程。我试图在 if 语句中使用 JComboBox 选择,然后根据 JTextField 中的选择显示答案。这一切都正确编译,但答案不会显示,我不知道我需要改变什么。我已经搜索并尝试了几种不同的方法,但似乎都没有。

import javax.swing.*;
import java.awt.event.*;

public class HayDyGuiTempConv extends JFrame
{

public static void main(String[] args)
{
    new HayDyGuiTempConv();
}

private JButton buttonConvert;
private JButton exitButton;
private JTextField textAmount;
private String fieldText;
private JTextField field;



public HayDyGuiTempConv()
{

    this.setSize(440,150);
    this.setLocation(350,420);
    this.setTitle("Temperature Conversion");
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    ButtonListener bl = new ButtonListener();
    JPanel panel1 = new JPanel();
    panel1.add(new JLabel("Enter temperature to convert: "));

    textAmount = new JTextField(6);
    panel1.add(textAmount);

    JComboBox<String> comboBox = new JComboBox<> (new String[] {"C to F", "F to C"});
    comboBox.addActionListener(bl);
    panel1.add(comboBox);

    buttonConvert = new JButton("Convert");
    buttonConvert.addActionListener(bl);
    buttonConvert.setToolTipText("Convert the temperature.");
    panel1.add(buttonConvert);

    panel1.add(new JLabel("Temp: "));

    field = new JTextField(6);
    field.setEditable(false);
    panel1.add(field);

    exitButton = new JButton("Exit");
    exitButton.addActionListener(bl);
    exitButton.setToolTipText("Exit the program.");
    panel1.add(exitButton);

    this.add(panel1);

    this.setVisible(true);
}

private class ButtonListener implements ActionListener
{

    public void actionPerformed(ActionEvent e)
    {


        if(e.getSource() == buttonConvert)
        {

            if(e.getSource() == ("C to F"))
            {
                double tempEntered = Double.parseDouble(textAmount.getText());
                double tempConverted = tempEntered - 32 * (5/9);
                String tempAmount = (Double.toString(tempConverted));
                field.setText(tempAmount);
            }
            else if(e.getSource() == ("F to C"))
            {
                double tempEntered = Double.parseDouble(textAmount.getText());
                double tempConverted = tempEntered * (9/5) + 32;
                String tempAmount = (String.format("%.2f",(tempConverted)));
                field.setText(tempAmount);
            }
        }
        else if(e.getSource() == exitButton)
        {
            System.exit(0);
        }
    }
}
}

编辑:当我输入一个数字并尝试转换时,我尝试了这两个建议并尝试转换我在交互窗格中得到这个:线程“AWT-EventQueue-0”中的异常java.lang.ClassCastException:javax。 swing.JButton 不能转换为 javax.swing.JComboBox

【问题讨论】:

    标签: java swing if-statement jtextfield jcombobox


    【解决方案1】:
    if(e.getSource() == ("C to F"))
    

    事件的“来源”是一个组件,而不是一个字符串。在这种情况下,它是JComboBox

    您想测试组合框的选定值,因此代码应类似于:

    JComboBox comboBox = (JComboBox)e.getSource();
    int index = comboBox.getSelectedIndex();
    
    If (index == 0)
        //  do C to F conversion
    else
        //  do F to C conversion
    

    另外,不要使用“==”来比较字符串值。将来进行字符串比较时,您可以使用字符串的equals(...) 方法。

    编辑:

    我以为您正在将 ActionListener 添加到组合框中。然后,您可以在从组合框中选择项目时自动进行转换。不需要按钮。

    如果要保留按钮,则需要将组合框定义为类中的实例变量。然后您可以按名称访问组合框。

    【讨论】:

    • 我根据您的建议编辑了我的代码,现在当我尝试转换时收到很多红色文本,说明 JButton 无法转换为 javax.swing.JComboBox。这是异常:线程“AWT-EventQueue-0”中的异常 java.lang.ClassCastException: javax.swing.JButton 无法转换为 javax.swing.JComboBox
    • 非常感谢。我需要保留按钮,所以我添加了实例变量并且它起作用了。
    【解决方案2】:

    在比较字符串时不要使用 ==,因为这不会比较值而是比较实例。

    用comboBox.getSelectedItem().toString()获取comboBox的String值; 然后将它们与 .equals() 方法进行比较。

    大多数情况下 == 将用于比较数字或实例;

    String selected = comboBox.getSelectedItem().toString();
    
    if(selected.equals("C to F")){
    //  do C to F conversion
    }else{
    //  do F to C conversion
    }
    

    【讨论】:

    • 我根据您的建议编辑了我的代码,现在当我尝试转换时收到很多红色文本,说明 JButton 无法转换为 javax.swing.JComboBox。这是异常:线程“AWT-EventQueue-0”中的异常 java.lang.ClassCastException: javax.swing.JButton 无法转换为 javax.swing.JComboBox –
    猜你喜欢
    • 2016-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    • 2014-12-13
    • 2017-10-18
    • 2014-08-18
    • 1970-01-01
    相关资源
    最近更新 更多