我已经有几年没有接触过 Java 了,现在我回来了,尝试制作一个 GUI 来测试 JFrame。我正在尝试创建一个 JButton,单击该按钮将关闭程序。使用当前代码,我收到错误 “javax.swing.AbstractButton 类型中的方法 addActionListener(java.awt.event.ActionListener) 不适用于参数 (new ActionListener(){})”
.我发现的其他问题涉及多个类(class)或其他问题,这些问题对我的问题没有帮助。任何解决方案或替代方案将不胜感激。
import javax.swing.*;
import java.awt.*;
public class testFrame
{
public static void main(String args[])
{
long base = System.currentTimeMillis();
JFrame frame = new JFrame("Test Window");
frame.setLocationRelativeTo(null);
frame.setUndecorated(true);
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setVisible(true);
JLabel label = new JLabel();
JLabel label2 = new JLabel("How Long Have I Been Running?");
JButton button = new JButton("EXIT");
button.addActionListener(new ActionListener(){
public void actionPerformed (ActionEvent e) {
JFrame.dispose();
}
});
Box box = Box.createVerticalBox();
box.add(label2);
box.add(label);
box.add(button);
label2.setAlignmentX(Component.CENTER_ALIGNMENT);
label.setAlignmentX(Component.CENTER_ALIGNMENT);
button.setAlignmentX(Component.CENTER_ALIGNMENT);
frame.getContentPane().add(box, BorderLayout.CENTER);
while(true)
{
long input = System.currentTimeMillis();
label.setText(Long.toString(input - base));
}
}
}
最佳答案
我改变了一些东西来让你的程序运行。
始终在 event dispatch thread 上构建 Swing 程序.
使用 Swing
Timer
每隔一段时间就让某事发生;完全运行循环只会让房间更热。使用
JFrame.EXIT_ON_CLOSE
进行默认关闭操作,并从 EXIT 按钮发送WINDOW_CLOSING
事件。在添加组件和
pack()
框架后调用setVisible()
。
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
public class TestFrame {
public static void main(String args[]) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame("Test Window");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//frame.setUndecorated(true);
//frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
Box box = Box.createVerticalBox();
JLabel time = new JLabel("0");
time.setAlignmentX(Component.CENTER_ALIGNMENT);
JLabel label = new JLabel("How Long Have I Been Running?");
label.setAlignmentX(Component.CENTER_ALIGNMENT);
JButton button = new JButton("EXIT");
button.setAlignmentX(Component.CENTER_ALIGNMENT);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
frame.dispatchEvent(new WindowEvent(
frame, WindowEvent.WINDOW_CLOSING));
}
});
box.add(label);
box.add(time);
box.add(button);
frame.add(box, BorderLayout.CENTER);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
long base = System.currentTimeMillis();
Timer timer = new Timer(100, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
long input = System.currentTimeMillis();
time.setText(Long.toString(input - base));
}
});
timer.start();
}
});
}
}
关于java - 无法向 JButton 添加操作监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37904849/