4

例子:

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 对象来解决它,但只是想知道为什么它不可能。

4

1 回答 1

6

正如您已经发现的那样,您只能在 Swing 层次结构中添加一次 Swing 组件。这在“使用顶级组件教程”中有记录

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

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

于 2012-07-14T06:53:50.787 回答