我有一个swing类,其中包括一个声明为final的String变量str3和两个
由两个JButton b1实现的ActionListener接口
和b2,当按b1 JButton时,str3字符串采用一个值,
我的问题是如何使str3的值在整个课堂上得到改变
而是在第二个ActionListener接口中(而不是仅在第一个内部类中)。
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.*;
public class mySwing extends JFrame {
JButton b1, b2;
public mySwing() {
final String str3;
JPanel panel = new JPanel();
b1 = new JButton("please click me first");
b2 = new JButton("please click me second");
final JTextField txt = new JTextField(" ");
panel.add(txt);
Container pane = getContentPane();
panel.add(b1);
panel.add(b2);
pane.add(panel);
str3 = new String();
b1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent acv) {
String input = "HelloWorld";
String str3 = new String(input.substring(0, 5));
txt.setText(str3);
}
});
b2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent acv) {
txt.setText(str3);
}
});
setVisible(true);
}
public static void main(String[] args) {
new mySwing();
}
}
最佳答案
只需将str3
设为外部类mySwing
的非最终实例变量即可。
顺便说一句,不要做类似new String(input.substring(0, 5))
的事情,因为input.substring(0, 5)
的结果是一个字符串,所以您无需创建另一个字符串。
根据您的代码:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.*;
public class mySwing extends JFrame {
JButton b1, b2;
String str3="";
public mySwing() {
JPanel panel = new JPanel();
b1 = new JButton("please click me first");
b2 = new JButton("please click me second");
final JTextField txt = new JTextField(" ");
panel.add(txt);
Container pane = getContentPane();
panel.add(b1);
panel.add(b2);
pane.add(panel);
str3 = new String();
b1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent acv) {
str3+=" (1)";
txt.setText(str3);
}
});
b2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent acv) {
str3+=" (2)";
txt.setText(str3);
}
});
setVisible(true);
}
public static void main(String[] args) {
new mySwing();
}
}