关于一个简单的Swing监听器代码的一些疑问

时间:2013-09-24 09:35:39

标签: java swing awt

我正在研究Java Swing和监听器的使用,我在使用以下简单代码时遇到了一些问题:

package com.mycompany.experiment;

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;

public class ListenerExp1 {

    private class MyButtonListener implements ActionListener {
        public void actionPerformed(ActionEvent evt) {
            // Qui scriviamo il codice che vogliamo eseguire all' azione del
            // click sul pulsante
        }
    }

    JFrame frame = new JFrame("FrameDemo");
    frame.setMinimumSize(new Dimension(800, 400));

    JButton button = new JButton("Cliccami");
    MyButtonListener listener = new MyButtonListener();

    button.addActionListener(listener);

}

在这段代码中,我声明了一个监听器类,并尝试创建一个JFrame和一个JButton对象。

问题在于,当我尝试通过以下行添加一些属性到这些对象时:

frame.setMinimumSize(new Dimension(800, 400));

button.addActionListener(listener);

Eclipse在这两行上签名以下错误:

  

此行有多个标记      - 令牌上的语法错误,错放的构造(s)      - 令牌“setMinimumSize”上的语法错误,=此后的预期

有什么问题?

TNX

安德烈

2 个答案:

答案 0 :(得分:2)

这些语句应该在代码块中,例如构造函数

JFrame frame = new JFrame("FrameDemo");
frame.setMinimumSize(new Dimension(800, 400));

JButton button = new JButton("Cliccami");
MyButtonListener listener = new MyButtonListener();

button.addActionListener(listener);

此外,你想在EDT中调用它们

SwingUtilities.invokeLater(new Runnable() {

        @Override
        public void run() {
            JFrame frame = new JFrame("FrameDemo");
            frame.setMinimumSize(new Dimension(800, 400));

            JButton button = new JButton("Cliccami");
            MyButtonListener listener = new MyButtonListener();

            button.addActionListener(listener);
        }
    });

阅读:Initial Threads

答案 1 :(得分:1)

在java中,无法在方法之外或之外初始化实例。

将以下代码放在方法中。

JFrame frame = new JFrame("FrameDemo");
frame.setMinimumSize(new Dimension(800, 400));

JButton button = new JButton("Cliccami");
MyButtonListener listener = new MyButtonListener();

button.addActionListener(listener);