Andre
Andre

Reputation: 363

Updating main GUI Elements in Java Swing

I'm trying to update the main gui in a java swing application, so there is a runnable thread that keeps the main gui visible, but the problem is it is called in main, and main is a static function. I would like to say Element.SetTtext. But all calls that I want to update are not static. How can I update the lables,..etc in the Main GUI then?

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

Upvotes: 0

Views: 1416

Answers (2)

Costis Aivalis
Costis Aivalis

Reputation: 13728

What I understood from your question is that you think static means non-changeable. This is not true with Java. In Java objects and components that never change are characterized as final.

Keep your main simple and small and make your loops and changes in doThings();

Here is a Timer in order to update the text of the 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;
}

Upvotes: 1

Madhu V Rao
Madhu V Rao

Reputation: 937

little more clarity is required , when do u want to update the labels ? is it based on an event ?

You can always keep a global variable of the component you want to update and access it from the event handlers.

Can you please update your question with the code , so that it gives a better clarity ?

Upvotes: 1

Related Questions