簡體   English   中英

Java按鈕和偵聽器無法同步工作

[英]Java button and listener not working in sync

試圖在JAVA中為已經制作的程序添加一個按鈕。 它將溫度從華氏溫度轉換為攝氏溫度。 我的按鈕不會顯示。 我錯過了什么。 我們的想法是,您既可以按Enter鍵,也可以按按鈕獲得結果。 該計划的主要部分是:

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);

        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 JButton push;
    private JTextField fahrenheit;
    //-----------------------------------------------------------------
    // Constructor: Sets up the main GUI components.
    //-----------------------------------------------------------------
    public FahrenheitPanel()
    {
        inputLabel = new JLabel ("Enter Fahrenheit temperature:");
        outputLabel = new JLabel ("Temperature in Celsius: ");
        resultLabel = new JLabel ("---");
        fahrenheit = new JTextField (5);
        fahrenheit.addActionListener (new TempListener());
        add (inputLabel);
        add (fahrenheit);
        add (outputLabel);
        add (resultLabel);

        //Here's some button code
        push = new JButton ("Push!!!");
        push.addActionListener (new ButtonListener());
        add (push);

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

    private class ButtonListener implements ActionListener
    {

        private class TempListener implements ActionListener
        {
            //--------------------------------------------------------------
            // Performs the conversion when the enter key is pressed in
            // the text field.
            //--------------------------------------------------------------

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

該按鈕不會顯示,因為ActionListener代碼不能編譯為

  • ButtonListener需要actionPerformed方法
  • TempListener是一個內部類的ButtonListener但作為一個外部類中引用

例如,可以使用匿名ActionListeners簡化代碼

push.addActionListener(new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent e) {
      ...
    }
});

你需要什么ButtonListenerTempListener

//Here's some button code
    push = new JButton ("Push!!!");
    add (push);

    push.addActionListener (new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent actionEvent) {
            int fahrenheitTemp, celsiusTemp;
            String text = fahrenheit.getText();
            fahrenheitTemp = Integer.parseInt (text);
            celsiusTemp = (fahrenheitTemp-32) * 5/9;
            resultLabel.setText (Integer.toString (celsiusTemp));
        }
    });

而對於fahrenheit

    ...
    add (fahrenheit);
    fahrenheit.addActionListener (new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent actionEvent) {
            int fahrenheitTemp, celsiusTemp;
            String text = fahrenheit.getText();
            fahrenheitTemp = Integer.parseInt (text);
            celsiusTemp = (fahrenheitTemp-32) * 5/9;
            resultLabel.setText (Integer.toString (celsiusTemp));
        }
    });
    ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM