我想知道当变量的值依赖于动作侦听器时如何使变量成为全局变量。 (对不起,如果有任何小错误;我写的很匆忙)。 为了回应评论,我需要能够在我的代码中的任何地方使用变量及其值。
import javax.swing.*;
import java.awt.*;
public class example {
public static String a;
public static void main(String[] args) {
final JFrame f = new JFrame();
f.setSize(200, 200);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
JPanel p = new JPanel();
f.add(p);
final JTextField tf = new JTextField("write stuff");
p.add(tf);
tf.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
a = tf.getText();
//How would I make this global?
}
});
//and I would use it in this JLabel
JLable l = new JLabel(a);
p.add(a);
}
}
答案 0 :(得分:3)
您现在在技术上做的是您的问题的答案,但是您需要注意的是JLabel
没有将其文本设置为值变量,它将文本设置为变量的值。基本上,无论您创建JLabel
时的价值是什么,这都是值,直到您调用其上的方法来更改该值,例如l.setText(newText);
如果你想在一般意义上实现这一点,你需要一个variable change listener。有关实现这一目标的更多信息,请参阅该链接。
答案 1 :(得分:1)
编辑:HORRIBLE解决方案,没有任何听众,每个人都会阻止你使用但会工作:
声明public final static String[] a = {"your string here"};
您不需要此变量是全局变量。你根本不需要这个变量。 就这样做:
import javax.swing.*;
import java.awt.*;
public class example {
public static void main(String[] args) {
final JFrame f = new JFrame();
f.setSize(200, 200);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true):
JPanel p = new JPanel();
f.add(p);
final JTextField tf = new JTextField("write stuff");
p.add(tf);
JLable l = new JLabel();
tf.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
l.setText(tf.getText());
//So how would I make this global
}
});
//and I would use it in this JLabel
}
}