java - 实时更改 JLabel 的文本值

标签 java swing actionlistener jlabel settext

我正在尝试实时更改此 JLabel (searchedstock) 的文本。这是我的代码:

public void gamegui() {

    GridBagConstraints c = new GridBagConstraints();
    c.fill = GridBagConstraints.HORIZONTAL;
    c.gridwidth = 2;
    JLabel welcome = new JLabel("Welcome " + playername + "!");
    welcome.setFont(new Font("Arial", 1, 30));
    gamepanel.add(welcome, c);
    c.gridx = 0;
    c.gridy = 1;
    gamepanel.add(new JPanel(), c);
    c.gridwidth = 1;
    c.gridy = 2;
    gamepanel.add(new JLabel("Symbol Search:"), c);
    c.gridx = 1;
    final JTextField symbolsearch = new JTextField(10);
    gamepanel.add(symbolsearch, c);
    c.gridx = 0;
    c.gridy = 3;
    gamepanel.add(new JPanel(), c);
    c.gridx = 0;
    c.gridy = 4;
    c.gridwidth = 2;
    JButton search = new JButton("Search");
    search.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e){

            stockvalue = Double.toString(getstocks(symbolsearch.getText()));
        }
    });
    gamepanel.add(search, c);
    c.gridx = 0;
    c.gridy = 5;
    gamepanel.add(new JPanel(), c);
    c.gridx = 0;
    c.gridy = 6;
    c.gridwidth = 2;
    JLabel searchedstock = new JLabel(stockvalue);
    gamepanel.add(searchedstock, c);
    add(gamepanel);
}

因为它的监听器在内部类中,所以我如何通过按下该按钮实时更改值?它不能直接访问我的 JLabel,所以我不能使用 setText();这是我的问题。

最佳答案

你至少有两个选择......

选项#1

制作 JLabel final,但您必须在内部监听器之前执行此操作...

public void gamegui() {
    /*...*/
    final JLabel searchedstock = new JLabel(stockvalue);
    JButton search = new JButton("Search");
    search.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e){

            stockvalue = Double.toString(getstocks(symbolsearch.getText()));
            searchedstock.setText(NumberFormat.getNumberInstance().format(stockValue));
        }
    });
    gamepanel.add(search, c);
    c.gridx = 0;
    c.gridy = 5;
    gamepanel.add(new JPanel(), c);
    c.gridx = 0;
    c.gridy = 6;
    c.gridwidth = 2;
    gamepanel.add(searchedstock, c);
    add(gamepanel);
}

选项 2

使标签成为类实例字段...

private JLabel searchedstock;

public void gamegui() {
    /*...*/
    final JLabel searchedstock = new JLabel(stockvalue);
    JButton search = new JButton("Search");
    search.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e){

            stockvalue = Double.toString(getstocks(symbolsearch.getText()));
            searchedstock.setText(NumberFormat.getNumberInstance().format(stockValue));
        }
    });
    gamepanel.add(search, c);
    c.gridx = 0;
    c.gridy = 5;
    gamepanel.add(new JPanel(), c);
    c.gridx = 0;
    c.gridy = 6;
    c.gridwidth = 2;
    searchedstock = new JLabel(stockvalue);
    gamepanel.add(searchedstock, c);
    add(gamepanel);
}

关于java - 实时更改 JLabel 的文本值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18306623/

相关文章:

java - 用 BFS 算法求解猴子和香蕉

java - 椭圆形移动程序。椭圆不动,有什么我可以在这里炼化的吗?

java - 单击来自不同类的按钮时更新 JFrame

java - 在 Android 上接收和阅读 GATT 通知

java - 如何产生不重复的随机数

java - 如何在执行操作后移动按钮?

java - 从 JFrame 调用时,ActionListener 在 JPanel 上执行两次

java - 合并随机数游戏中按钮的 Action 监听器

Java 序列化、Kryo 和对象图

java - 如何向 JTable 单元格添加下拉菜单