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

Pra*_*een 4 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);
        }
    });
  }
}
Run Code Online (Sandbox Code Playgroud)

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

Rob*_*bin 6

您只能在Swing层次结构中添加一次Swing组件,如您所知.这在"使用顶级组件教程"中有记录.

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

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

  • "技术限制"很可能是组件的字段保持组件相对于其父和/或其窗口的计算大小和位置.如果组件可以多次位于容器(或容器)中,则字段不能保存两组位置/大小的相关信息. (3认同)