[英]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) {
...
}
});
你需要什么ButtonListener
和TempListener
?
//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.