为什么多次添加时无法显示相同的JComponent对象?

时间:2012-07-14 06:44:31

标签: java swing

示例:

public class JFrameTest {
  public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            JFrame frame = new JFrame();
            JButton button = new JButton("Hello!");
            frame.getContentPane().add(button);
            frame.getContentPane().add(button);
            frame.pack();
            frame.setVisible(true);
            frame.setLocationRelativeTo(null);
        }
    });
  }
}

在上面的示例中,即使没有错误,“按钮”对象也只添加一次。我问这个的原因是,我想在JFrame和JDialog上添加一个相同的JPanel对象(在某些表上双击以进行编辑/删除功能)。我能够通过拥有两个JPanel对象来解决它,但只是想知道为什么它不可能。

1 个答案:

答案 0 :(得分:6)

您只能在Swing层次结构中添加一次Swing组件,如您所知。这在'Using top-level components tutorial'

中有记录
  

每个GUI组件只能包含一次。如果组件已经在容器中并且您尝试将其添加到另一个容器,则该组件将从第一个容器中删除,然后添加到第二个容器中。

不完全确定是否存在技术限制让这个决定,但我可以想象,例如,如果你能够将相同的组件添加到两个ContainergetParent方法会产生奇怪的结果}Š