首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java - GUI将相同的按钮添加到两个不同的面板

Java - GUI将相同的按钮添加到两个不同的面板
EN

Stack Overflow用户
提问于 2012-05-15 22:09:26
回答 6查看 3.9K关注 0票数 1
代码语言:javascript
复制
public class Test extends JFrame {
    public Test() {
        JButton jbt1 = new JButton("Java");
        JButton jbt2 = new JButton("Programming");
        JPanel p1 = new JPanel();
        JPanel p2 = new JPanel();
        JPanel p3 = new JPanel();
        p1.add(jbt1);
        p2.add(jbt2);
        p3.add(jbt1);

        add(p1, BorderLayout.NORTH);
        add(p2, BorderLayout.SOUTH);
        add(p3, BorderLayout.CENTER);
    }
    public void main(String[] args) {
        Test f = new Test();
        f.setVisible(true);
    }
}

输出为:

Java

编程

我所期待的:

Java

Java

编程

为什么? jbt1在p3的什么地方??

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-05-15 22:15:17

Java GUI组件是分层布局的,每个组件只能有一个父组件。通过将组件添加到Container中,任何旧的父引用都会丢失。

票数 4
EN

Stack Overflow用户

发布于 2012-05-15 22:20:12

但是你可以:

代码语言:javascript
复制
public static void main(String[] args) {

    Action javaAction = new JavaAction();

    JPanel p1 = new JPanel();
    JPanel p3 = new JPanel();
    p1.add(new JButton(javaAction));
    p3.add(new JButton(javaAction));
}

private static final class JavaAction extends AbstractAction {

    JavaAction() {
        super("Java");
    }

    public void actionPerformed(ActionEvent e) {

        // put your code here

    }
}
票数 2
EN

Stack Overflow用户

发布于 2012-05-15 22:18:58

调用结构如下

代码语言:javascript
复制
    p1.add(jbt1); //jbt1 added to p1
    p2.add(jbt2); //jbt2 added to p2
    p3.add(jbt1);  //jbt1 added to p3 

jbt1不再包含在同一个容器中,因此您将获得您提到的输出。它的父类实际上从p1更改为p3。

如果您希望包含具有相同功能的按钮,则可以将操作侦听器重定向到相同的方法。

但是,这些按钮必须单独创建。

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10602564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档