0
我已經創建了一個按鈕數組,將它們添加到我的框架和(低效)創建的動作偵聽器爲每個他們打開JOptionPane接受輸入並將其添加到字符串數組,但在彈出窗口關閉後,數組按鈕上的文本不會更新,而不是數組的一部分的按鈕會更新其文本。JButton在數組中不會更新文本
字符串數組抓取JOptionPane的罰款數據,它只是不會更新按鈕的標題。
在我的完整程序中,我正在將ar_str_vals寫入一個.xml文件,並且它可以正確地保存和加載數組,並且令人驚訝的是數組按鈕正確設置了它們的文本,但僅在我的程序開始處。
package wtf;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class Wtf extends JFrame{
JButton[] ar_btn_vals = new JButton[2];
String[] ar_str_vals = new String[2];
public Wtf(){
super("Title");
setLayout(null);
setSize(300, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
constructor();
actionlisteners();
}
public void constructor(){
for (int x = 0;x<=1;x++){
ar_btn_vals[x] = new JButton();
ar_btn_vals[x].setText(ar_str_vals[x]);
ar_btn_vals[x].setBounds(5,(100 * x)+20, 100,40);
ar_btn_vals[x].setVisible(true);
add(ar_btn_vals[x]);
System.out.println(ar_str_vals[x]);
}
}
public void actionlisteners(){
for (int x=0;x<=1;x++){
switch (x){
case 0:
ar_btn_vals[0].addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
ar_btn_vals0ActionPerformed(evt);
}
});
break;
case 1:
ar_btn_vals[1].addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
ar_btn_vals1ActionPerformed(evt);
}
});
break;
}
}
}
private void ar_btn_vals0ActionPerformed(java.awt.event.ActionEvent evt) {
JFrame frm_val0change = new JFrame();
String newval = JOptionPane.showInputDialog(frm_val0change, "Enter new Button 1 Value");
ar_str_vals[0] = newval;
constructor();
}
private void ar_btn_vals1ActionPerformed(java.awt.event.ActionEvent evt) {
JFrame frm_val1change = new JFrame();
String newval = JOptionPane.showInputDialog(frm_val1change, "Enter new Button 2 Value");
ar_str_vals[1] = newval;
constructor();
}
public static void main(String[] args) {
Wtf frame = new Wtf();
}
}
我知道,這是效率不高,因爲它可能是,但我有有限的時間來完成這一點,我絕對不知道這是爲什麼不能正常工作。
這也是我第一次問一個問題,所以如果我已經格式化了任何錯誤,請留下仁慈。
然後再次調用構造函數,使用ActionListener中的setText更新按鈕文本 – MadProgrammer
@MadProgrammer修復了我的問題。我想這就是我懶惰,只是一遍又一遍地調用構造函數。任何想法爲什麼調用構造函數正確地更新不屬於數組的按鈕,但不能更新數組中的按鈕? –
好吧,這是一個組合,你只是一遍又一遍地添加新的按鈕(因爲你已經取消了佈局管理器)到相同的位置,所以它歸結爲一個z排序位置,並從什麼卸妝,組件是以相反的順序繪製的,但如果它們不是,再次調用構造函數仍然是一個壞主意 – MadProgrammer