3

我正在创建 GUI,但我不知道如何解决我的问题。我想做的是从 PanelClass 创建几个面板,就像我在 Main 中所做的那样。

我不知道如何:

  1. 在我的面板中命名按钮并赋予它们一些功能(就像我尝试使用按钮 b1 一样)
  2. 向 panel3 添加额外的标签和按钮。

我的主要课程

public class Main {

    JFrame f;
    PanelClass panel1, panel2, panel3;
    JButton b1, b2;

    public Main() {

        b1 = new JButton("asasa");

        f = new JFrame();
        f.setSize(300, 300);
        f.setLayout(new GridBagLayout());
        f.setVisible(true);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        panel1 = new PanelClass(b1, b2, panel1);
        panel2 = new PanelClass(b1, b2, panel2);
        panel3 = new PanelClass(b1, b2, panel3);

        f.add(panel1);
        f.add(panel2);
        f.add(panel3);
    }

    public static void main(String[] args) {    
        Main m = new Main();    
    }    
}

我的面板类

public class PanelClass extends JPanel {

    public PanelClass(JButton btn, JButton btn1, JPanel p) {

        super();
        p = new JPanel(new GridBagLayout());
        btn = new JButton();
        btn1 = new JButton();

        GridBagConstraints c = new GridBagConstraints();

        c.gridx = 0;
        c.gridy = 0;
        p.add(btn, c);
        c.gridx = 0;
        c.gridy = 1;
        p.add(btn1, c);
        add(p);
    }
}
4

3 回答 3

5
  1. 一个组件一次只能存在于一个可见容器中(除非它被用作享元渲染器)。因此,将相同的按钮放入 3 个面板中是行不通的。
  2. 该代码在其构造函数中传递一个按钮,该按钮PanelClass被忽略。而是创建了 2 个新按钮实例。只需将传递的按钮分配给..当我注意到它们不是时,我会说“类级别属性”。完全删除 btn = new JButton();,按钮构造函数中传递的文本就会出现。
  3. 有关事件,请参阅如何编写动作侦听器
于 2012-10-16T14:50:16.110 回答
0

尝试阅读官方 Swing 教程。它解释了如何添加面板、标签等。

要编辑标签名称,您可以使用setText(String name)方法。要向按钮添加功能,您必须在每个按钮中实现一个侦听器。像在其他面板中一样添加标签,我看不出问题。

于 2012-10-16T13:58:48.500 回答
0

要添加“事件”,如单击和鼠标悬停等 - 您必须为小部件实现正确的“侦听器”。阅读任何关于 Swing 的优秀教程,它会告诉你一切。屏幕上的小部件也是常规对象,因此可以像常规对象一样将它们添加到“集合”中,进行迭代和玩耍。注意线程复杂性和警告“跨线程调用对您的程序有害”。

于 2012-10-16T14:40:12.380 回答