java - 创建执行功能的按钮

标签 java swing jpanel listener jbutton

我最终大大简化了我的方法。我刚刚将第二个类文件修改为按钮,并完全删除了第三个类文件。现在,操作按钮和键盘上的返回键都会使程序完成计算。这确实并不困难,只是需要使用相同的方法但使用不同类型的听众。谢谢!

import javax.swing.JFrame;
public class Fahrenheit
{
    public static void main (String[] args)
    {

    JFrame frame = new JFrame ("Fahrenheit");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    FahrenheitPanel panel = new FahrenheitPanel();

    frame.getContentPane().add(panel);
    frame.pack();frame.setVisible(true);

    }
}

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


public class FahrenheitPanel extends JPanel
{
    private JLabel inputLabel, outputLabel, resultLabel;
    private JTextField fahrenheit;
    private JButton push;

    public FahrenheitPanel()
    {
        inputLabel = new JLabel ("Enter Fahrenheit temperature:");
        outputLabel = new JLabel ("Temperature in Celsius: ");
        resultLabel = new JLabel ("---");
        push = new JButton ("Convert");

        fahrenheit = new JTextField (5);
        fahrenheit.addActionListener (new TempListener());
        push.addActionListener (new ButtonListener());

        add (inputLabel);
        add(fahrenheit);
        add (outputLabel);
        add (resultLabel);
        add (push);

        setPreferredSize (new Dimension(300,75));
        setBackground (Color.yellow);
    }


    private class TempListener implements ActionListener
    {
        public void actionPerformed (ActionEvent event)
        {
            int fahrenheitTemp, celsiusTemp;

            String text = fahrenheit.getText();

            fahrenheitTemp = Integer.parseInt (text);
            celsiusTemp = (fahrenheitTemp-32) * 5/9;

            resultLabel.setText (Integer.toString (celsiusTemp));
          }
      }


    private class ButtonListener implements ActionListener
    {
        public void actionPerformed (ActionEvent event)
        {
            int fahrenheitTemp, celsiusTemp;

            String text = fahrenheit.getText();

            fahrenheitTemp = Integer.parseInt (text);
            celsiusTemp = (fahrenheitTemp-32) * 5/9;

            resultLabel.setText (Integer.toString (celsiusTemp));           
        }
    }
}

最佳答案

您可以执行以下操作来实现它。

  1. 在类 PushCounterPanel 中定义类型变量,例如

    私有(private) FahrenheitPanel 面板;

    并更改类 PushCounterPanel 的构造函数。

    公共(public) PushCounterPanel(FahrenheitPanel 面板) { this.panel = 面板; ... }

为此,我们可以在 FahrenheitPanel 面板中获取输入文本值。

2 单击按钮时,首先需要检查文本值是否为空且不是数字。如果在文本字段中输入数值,则在 ButtonListener 类中添加以下代码。

         fahrenheitTemp = Integer.parseInt(panel.getFahrenheit().getText());
         celsiusTemp = (fahrenheitTemp-32) * 5/9;

这样就可以通过点击Button来填充值了。

3 因此,您需要更改以下代码。

a) 华氏度的主要方法

frame.getContentPane().add(new PushCounterPanel(面板));

b) 将以下 getter/setter 方法添加到 FahrenheitPanel 类中。

public JTextField getFahrenheit() {
    return fahrenheit;
}


public void setFahrenheit(JTextField fahrenheit) {
    this.fahrenheit = fahrenheit;

希望这可以帮助你。

关于java - 创建执行功能的按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19698548/

相关文章:

java - 如何将 JPanel 图形添加到 JFrame 而不覆盖 JFrame

对象数组的Java Stream Reduce

java - 如何将编辑好的JTable数据保存到数据库?

java - Eclipse SQLite 使用Where 子句进行多个查询

java - 以团队形式构建 Swing 类(class)

java - 删除 JPanel 内的 JPanel... 在 JPanel 内

java - JLayeredPane 中的面板显示其后面的按钮

java - 我们可以在空对象上调用任何方法吗?

java - 位置管理器检查权限

java - 什么都不接受也不返回什么的函数式接口(interface)