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);
        }
    });
  }
}

上記の例では、エラーがない場合でも、「button」オブジェクトは1回だけ追加されます。これを尋ねる理由は、JFrameとJDialogに同じJPanelオブジェクトを追加したいからです(一部のテーブルでは、編集/削除機能をダブルクリックします)。2つのJPanelオブジェクトを使用することで解決できますが、なぜそれが不可能なのかを知りたかっただけです。

4

1 に答える 1

6

すでに知っているように、SwingコンポーネントをSwing階層に追加できるのは1回だけです。これは、「トップレベルコンポーネントの使用チュートリアル」に記載されています。

各GUIコンポーネントは1回だけ含めることができます。コンポーネントがすでにコンテナ内にあり、それを別のコンテナに追加しようとすると、コンポーネントは最初のコンテナから削除されてから、2番目のコンテナに追加されます。

この決定を可能にする技術的限界があったかどうかは完全にはわかりませんが、たとえば、同じコンポーネントを2getParentつに追加できた場合、この方法では奇妙な結果が得られると想像できます。Container

于 2012-07-14T06:53:50.787 に答える