Проблема с внутренним классом. Недопустимая ошибка начала выражения - PullRequest
0 голосов
/ 10 февраля 2010

Я практикуюсь с использованием внутренних классов, но у меня возникают трудности с домашним заданием: оно выглядит следующим образом:

Создание класса компонента Swing BetterButtons, который расширяет JPanel и имеет три экземпляра Jbutton, помеченные как «Один», «Два» и «Три». В конструкторе BetterButtons напишите локальный класс ButtonListener, который реализует ActionListener. Этот локальный класс имеет поле String name и конструктор, который принимает параметр String, который он назначает имени поля. Метод 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);
}
}

Кроме того, как я могу сослаться на правильное значение, которое будет присвоено имени строковой переменной?

Заранее спасибо

1 Ответ

1 голос
/ 10 февраля 2010

Я думаю, что ваше определение 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.");
     }

  }

А затем передайте имя каждому экземпляру Buttonlistener, например ::100100

  one.addActionListener(new ButtonListener("one"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...