0

我正在尝试更新 java swing 应用程序中的主 gui,因此有一个可运行的线程使主 gui 可见,但问题是它在 main 中调用,而 main 是一个静态函数。我想说的是 Element.SetTtext。但是我要更新的所有调用都不是静态的。那么如何在主 GUI 中更新标签、..等?

public static void main(String args[])
    {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() 
            {
                new AGC().setVisible(true);
          // code to update labels here
            }
        });
    }
4

2 回答 2

1

需要更清楚一点,你什么时候要更新标签?它是基于一个事件吗?

您始终可以保留要更新的组件的全局变量,并从事件处理程序中访问它。

您能否用代码更新您的问题,以便更清晰?

于 2013-04-04T17:18:25.037 回答
1

我从您的问题中了解到的是,您认为静态意味着不可更改。Java 并非如此。在 Java 中,永远不会改变的对象和组件被描述为final

保持你的主要简单和小,让你的循环和变化doThings();

这是一个计时器,用于更新 JLabel 的文本:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.Timer;

public class Foo extends JFrame {

    public Foo() {
        jLabel1 = new JLabel("label 1");
        jPanel1 = new JPanel();
        jPanel1.add(jLabel1);
        add(jPanel1);
        pack();
        // code to update whatever you like here
        doThings();
    }

    private void doThings() {
        // code to update whatever you like here
        ActionListener actionListener = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                jLabel1.setText("foo " + (j++));
            }
        };
        Timer timer = new Timer(500, actionListener);
        timer.start();
    }

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Foo().setVisible(true);
            }
        });
    }
    private JLabel jLabel1;
    private JPanel jPanel1;
    private int j = 0;
}
于 2013-04-04T17:31:53.540 回答