문제

나는 내부 수업을 사용하여 연습하고 있지만 숙제 질문에 어려움을 겪고 있습니다. 그것은 다음과 같습니다.

JPANEL을 확장하고 "One", "Two"및 "Three"라는 3 개의 jbutton 인스턴스가있는 스윙 구성 요소 클래스 BetterButtons를 만듭니다. BetterButtons의 생성자에서 ActionListener를 구현하는 로컬 클래스 ButtonListener를 작성하십시오. 이 로컬 클래스에는 필드 문자열 이름과 필드 이름에 할당하는 문자열 매개 변수를 취하는 생성자가 있습니다. 메소드 void Action은 콘솔 알림에서 출력을 나타 냈습니다. 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);
}
}

또한 문자열 변수 이름에 할당 할 적절한 값을 어떻게 참조 할 수 있습니까?

미리 감사드립니다

도움이 되었습니까?

해결책

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의 각 인스턴스화에 이름을 전달하십시오.

  one.addActionListener(new ButtonListener("one"));
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top