Как перезагрузить Java Swing GUI? - PullRequest
       15

Как перезагрузить Java Swing GUI?

0 голосов
/ 01 октября 2019

Мне нужно обновлять свой графический интерфейс каждый раз, когда функция запускается. Вот как я определил каркас графического интерфейса:

public class GUI {

private JFrame frame;

/**
 * Launch the application.
 */
public static void runGui() {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                GUI window = new GUI();
                window.frame.setVisible(true);
                window.frame.setSize(800, 600);
                window.frame.setTitle("My Title");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the application.
 */
 public GUI() {
    initialize();
}

/**
 * Initialize the contents of the frame.
 */
private void initialize() {
//CODE
}

Итак, функция GUI.runGui () вызывается в такой функции:

public void myFunction()
{
 //CODE
 GUI.runGui();
}

Проблема заключается в следующем: каждый раз, когда вызывается эта функция, она генерирует новый экземпляр GUI, поэтому я получаю несколько экземпляров. Это не то, что я хочу, так как мне просто нужно обновить содержимое графического интерфейса, который должен быть только один. Я считаю, что проблема архитектурная. Есть ли способ решить эту проблему?

Ответы [ 2 ]

1 голос
/ 01 октября 2019

Посмотрите, что делает runGui: он создает и инициализирует графический интерфейс каждый раз, когда вы его вызываете. Извлеките этот один раз код инициализации из runGui в другое место, которое вы запускаете один раз (например, метод initialize). И в runGui получите доступ к компоненту, который вы хотите обновить (возможно, к панели содержимого), как:

// This needs to become an instance method (non static) in this example in
// order to access the frame
public void runGui() {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            // Refresh your component here. Here I'm redrawing the
            // content pane

            frame.getContentPane().repaint();
        }
    });
}
0 голосов
/ 01 октября 2019
frame.repaint();

Эта статья содержит несколько примеров перекраски:

https://www.programcreek.com/java-api-examples/?class=javax.swing.JFrame&method=repaint

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...