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

Java Swing 按鈕 addActionListener 無效:匿名類建立新 JTextField 而非更新現有實例

     編輯:程式設計疑難解答

錯誤代碼

private void change() {
    String string = "456";
    field = new JTextField(string); // 錯誤:建立新物件,未加入 UI
}

原因

field 變數原本指向已加入面板的 JTextField。new JTextField() 創建**全新實例**,未加入容器,原 UI 元件無變化。Java 參數傳遞為**引用值傳遞**,重新賦值變數不影響原物件。

正確寫法

private void change() {
    field.setText("456"); // 更新現有元件文本
}

記憶模型圖解

field (參考變數) ──────► [JTextField@100] (已在面板)
field = new JTextField() ──► [JTextField@200] (新建,未在面板)
原面板仍指向 @100,畫面不變

延伸:C 指標類比

// C 風格
JTextField* field = &existing;
field = malloc(...); // 修改指標指向,原物件未動
// 正確
strcpy(field->text, "456"); // 修改物件內容

最佳實踐

  • UI 事件處理中**只修改現有元件狀態**(setText、setVisible、setEnabled)。
  • 若需動態增減元件,操作容器 panel.add()/remove() 後調用 revalidate(); repaint();。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved