如何在ActionListener之外创建变量的值全局

时间:2014-07-09 22:43:47

标签: java swing actionlistener

我想知道当变量的值依赖于动作侦听器时如何使变量成为全局变量。 (对不起,如果有任何小错误;我写的很匆忙)。 为了回应评论,我需要能够在我的代码中的任何地方使用变量及其值。

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);
    }
}

2 个答案:

答案 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


    }
}