java - 无法向 JButton 添加操作监听器

标签 java swing compiler-errors jframe jbutton

我已经有几年没有接触过 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()

screenshot

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/

相关文章:

java - Struts2 token 拦截器 : CSRF protection

c# - 矩阵行列式

java - 不同平台的SWT jar

java - 每次单击时创建包含 JTextField、JComboBox 和 JButton 的新行

php - PHP无法解析类中的串联字符串

java - RGB 颜色量化从 8 位到 6 位

Java程序CopyFile将一个文件复制到另一个文件

java - 如何使 Swing JComponent 成为更大的鼠标目标?

compiler-errors - ocaml中的环境- `type a'信封上的语法错误

java - 我收到3个非法的表达开始错误?