سؤال

أنا أمارس استخدام الطبقات الداخلية ولكن أواجه صعوبة في سؤال الواجبات المنزلية: كما يلي:

قم بإنشاء BookButtons من فئة المكونات التي تمدد jpanel ولديها ثلاث حالات JButton المسمى "واحد"، "اثنين"، و "ثلاثة". في منشئ BetterButtons، اكتب Button AlotoListener المحلي الذي ينفذ ActionListener. يحتوي هذا الفصل المحلي على اسم سلسلة حقل ومزعم يأخذ معلمة سلسلة تقوم بتعيين اسم الحقل. الطريقة الفراغ إخراج actionperformed على إشعار وحدة التحكم بأن الزر المسمى يتم الضغط عليه. في منشئ 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