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 風格
JTextField* field = &existing;
field = malloc(...); // 修改指標指向,原物件未動
// 正確
strcpy(field->text, "456"); // 修改物件內容
panel.add()/remove() 後調用 revalidate(); repaint();。