在Java中遇到ActionEvent和getText()问题

时间:2015-04-10 23:02:01

标签: java swing awt actionevent

并感谢您查看我的问题。

我正在开发一个程序,接受高度和宽度的用户输入,并根据从下拉菜单中选择的选项,计算矩形区域或圆周长。

到目前为止,我已经完成了所有工作,但是我遇到了ActionEvents的问题。我需要的指导是如何根据从下拉菜单中选择的选项更改计算公式。

我也无法设置computebtn来计算面积或周长,具体取决于选择的公式,以及从公式中使用的JTextField获取输入。如果我尝试使用getText(),我会收到此错误:

    error: incompatible types: string cannot be converted to int

TL; DR:需要帮助实现两个ActionEvent。一个用于更改标签和公式,另一个用于处理computebtn以获得答案。还需要帮助将用户的输入转换为公式。

非常感谢任何和所有帮助。

到目前为止我的代码:

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

public class areaOrCircumference extends JFrame implements ActionListener
{
    int height;
    int width;
    int area;
    int circumference;
    JLabel label = new JLabel("");
    JButton computebtn = new JButton("Compute");
    JLabel widthlbl = new JLabel("Enter Width:");
        JTextField widthfld = new JTextField(10);
    JLabel heightlbl = new JLabel("Enter Height:");
        JTextField heightfld = new JTextField(10);
    JLabel outputlbl = new JLabel();

    JPanel labelPanel = new JPanel();
    JPanel inputPanel = new JPanel();
    JPanel computePanel = new JPanel();

    public areaOrCircumference()
    {
        setLayout(new BorderLayout());
        add(labelPanel, BorderLayout.NORTH);
            labelPanel.add(label);
        add(inputPanel, BorderLayout.CENTER);
            inputPanel.setLayout(new GridLayout(3,2));
            inputPanel.add(widthlbl);
            inputPanel.add(widthfld);
            inputPanel.add(heightlbl);
            inputPanel.add(heightfld);
            inputPanel.add(outputlbl);
        add(computePanel, BorderLayout.SOUTH);
            computePanel.setLayout(new FlowLayout());
            computePanel.add(computebtn);
            computebtn.addActionListener(this);
    }

    public JMenuBar createMenuBar()
    {
        JMenuBar mnuBar = new JMenuBar();
        setJMenuBar(mnuBar);

        JMenu mnuType = new JMenu("Type", true);
        mnuBar.add(mnuType);

        JMenuItem mnuArea = new JMenuItem("Area");
            mnuType.add(mnuArea);
            mnuArea.setActionCommand("Area");
            mnuArea.addActionListener(this);

        JMenuItem mnuCirc = new JMenuItem("Circumference");
            mnuType.add(mnuCirc);
            mnuCirc.setActionCommand("Circumference");
            mnuCirc.addActionListener(this);

        return mnuBar;
    }

    public void actionPerformed(ActionEvent e)
    {
        String arg = e.getActionCommand();

        if(arg == "Area")
        {
            label.setText("Area of a rectangle");
            area = width*height;
        }

        if(arg =="Circumference")
        {
            label.setText("Circumference of a Circle");
            circumference = 2*width + 2*height;
        }
    }

    public static void main(String args[])
    {
        JFrame.setDefaultLookAndFeelDecorated(true);
        areaOrCircumference f = new areaOrCircumference();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setJMenuBar(f.createMenuBar());
        f.setTitle("Area/Circumference Calculator");
        f.setBounds(300,300,475,400);
        f.setVisible(true);
    }
}

1 个答案:

答案 0 :(得分:2)

  1. 不要将字符串与==进行比较,因为这会比较引用相等性,即,如果一个String引用与另一个变量相同的String对象,那么您并不关心。您希望测试每个String是否以相同的顺序保持相同的字符,并且使用equals(...)方法测试字符串相等的测试。如果您不关心案例,请使用equalsIgnoreCase(...)。因此,将if(arg == "Area")更改为if(arg.equals("Area"))
  2. 使用getText()获取JTextField文本,然后在尝试将其用作int之前将String解析为Integer.parseInt(...)的int。
  3. 即,

    int width = Integer.parseInt(widthfld.getText());