首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java GUI 同一按鈕實例重複 add 到容器:只會顯示一次

     編輯:程式設計綜合問答

結論

同一個 `JButton` 實例 `add` 多次到同一或不同容器,最終只會出現在最後一次 `add` 的容器中 (或拋出 `IllegalArgumentException: adding a window to a container`)。

原因

  • Swing/AWT 元件**單一父容器規則**:一個 Component 同一時間只能有一個父容器 (`Container.getParent()`)。
  • 再次 `add` 會先從舊父容器 `remove`,再加入新父容器。
  • 同一容器多次 `add` 同一實例:第二次 `add` 會先移除再加入,**位置可能改變 (視 LayoutManager),但實例仍只有一個**。

正確做法


// 錯誤
JButton btn = new JButton("Click");
for (int i=0; i<10; i++) panel.add(btn); // 只會有一個按鈕

// 正確:每次 new 新實例
for (int i=0; i<10; i++) {
    panel.add(new JButton("Button " + (i+1)));
}

延伸:動態建立按鈕陣列


JButton[] buttons = new JButton[10];
for (int i=0; i<10; i++) {
    buttons[i] = new JButton("Btn " + i);
    buttons[i].addActionListener(e -> {
        JButton src = (JButton)e.getSource();
        System.out.println("Clicked: " + src.getText());
    });
    panel.add(buttons[i]);
}

記住:**GUI 元件不可共享實例,每個視覺位置需獨立 `new`**。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved