0

我正在练习使用内部课程,但在作业问题上遇到困难:如下:

创建一个 Swing 组件类 BetterButtons,它扩展 JPanel 并具有三个标记为“一”、“二”和“三”的 Jbutton 实例。在 BetterButtons 的构造函数中,编写一个实现 ActionListener 的本地类 ButtonListener。这个本地类有一个字段字符串名称和一个构造函数,该构造函数接受一个分配给字段名称的字符串参数。方法 void actionPerformed 在控制台通知上输出标记为 name 的按钮已被按下。在 BetterButtons 的构造函数中,创建 ButtonListener 的三个实例,每个按钮一个监听其动作。

我快完成了,但是,我在该行得到一个非法的表达式开始错误:

 public void actionPerformed(ActionEvent e){

这是我的代码:

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class BetterButtons extends JPanel {
JButton one, two, three;
JPanel p;
public BetterButtons() {
    class ButtonListener implements ActionListener {
        String name;
        *****public ButtonListener(String name) {****
                public void actionPerformed(ActionEvent e){
                    System.out.println("Button "+name+"has been pressed.");
                }
              }
          }
    one = new JButton("One");
    two = new JButton("Two");
    three = new JButton("Three");
    one.addActionListener(new ButtonListener());
    two.addActionListener(new ButtonListener());
    three.addActionListener(new ButtonListener());
    p = new JPanel();
    p.add(one);
    p.add(two);
    p.add(three);
    this.add(p);
}
  public static void main(String[] args) {
    JFrame f = new JFrame("Lab 2 Exercise 2");
    BetterButtons w = new BetterButtons();
    f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    f.getContentPane().setLayout(new FlowLayout());
    f.getContentPane().add(w);
    f.pack();
    f.setVisible(true);
}
}

另外,如何引用要分配给字符串变量名的正确值?

先感谢您

4

1 回答 1

1

我认为您对 buttonListener 的定义应该是:

class ButtonListener implements ActionListener {
    String name;
    public ButtonListener(String name) {
            this.name = name;
     }
     public void actionPerformed(ActionEvent e){
                System.out.println("Button "+name+"has been pressed.");
     }

  }

然后将名称传递给按钮侦听器的每个实例化,例如:

  one.addActionListener(new ButtonListener("one"));
于 2010-02-10T05:26:50.227 回答