数组中的 JButton 不会更新文本
JButton in array wont update text
我创建了一个按钮数组,将它们添加到我的框架中并(低效地)为每个按钮创建了动作侦听器,这些侦听器打开一个 JOptionPane 以获取输入并将其添加到一个 String 数组,但是文本弹出窗口关闭后,数组按钮不会更新,而不属于数组的按钮会更新其文本。
字符串数组从 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();
}
}
我知道这并没有达到应有的效率,但我完成这项工作的时间有限,而且我完全不知道为什么它无法正常工作。
我也是第一次提问,如有格式错误请见谅
正如 MadProgrammer 所说,我所要做的就是更新我的动作侦听器中的按钮文本,而不是再次调用构造函数。
我创建了一个按钮数组,将它们添加到我的框架中并(低效地)为每个按钮创建了动作侦听器,这些侦听器打开一个 JOptionPane 以获取输入并将其添加到一个 String 数组,但是文本弹出窗口关闭后,数组按钮不会更新,而不属于数组的按钮会更新其文本。
字符串数组从 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();
}
}
我知道这并没有达到应有的效率,但我完成这项工作的时间有限,而且我完全不知道为什么它无法正常工作。
我也是第一次提问,如有格式错误请见谅
正如 MadProgrammer 所说,我所要做的就是更新我的动作侦听器中的按钮文本,而不是再次调用构造函数。