Как перезагрузить панель без использования CardLayouts? - PullRequest
0 голосов
/ 06 декабря 2018

TLDR;:
Я ищу способ перезагрузить JPanels и его компоненты.

Я хотел бы реализовать динамически изменяющийся JComboBox.Вот такая ситуация:
Есть кнопка, которая генерирует данные в фоновом режиме («генерировать контент»), здесь это просто некоторые случайные числа.После того, как данные сгенерированы, эти данные должны быть доступны для выбора внутри JComboBox.

/**
 * Initialize the contents of the frame.
 */
private void initialize() {
    frame = new JFrame();
    frame.setBounds(100, 100, 450, 300);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    panel = new JPanel();
    frame.getContentPane().add(panel, BorderLayout.CENTER);
    panel.setLayout(null);

    comboBox = new JComboBox<String>();

    comboBox.setBounds(39, 63, 144, 20);
    panel.add(comboBox);

    btnGenerateContent = new JButton("generate content");
    btnGenerateContent.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            comboContent = fillrandoms();
            comboBox = new JComboBox<>(fillrandoms());

        }
    });
    btnGenerateContent.setBounds(39, 11, 117, 23);
    panel.add(btnGenerateContent);
}

private static String[] fillrandoms() {
    String[] array = new String[10];
    for (int i = 0; i < 10; i++) {
        array[i] = "" + Math.random() * 100;

    }

    return array;
}

Теперь, когда я запускаю программу, она объявляет и запускает комбинированный список, прежде чем появятся данные для отображения.Моя идея заключалась в том, что когда я нажимаю кнопку «Создать контент», это также обновляет пользовательский интерфейс панели или ComboBox.но когда я вставляю panel.updateUI() или comboBox.updateUI(), ничего не происходит.
После исследований я нашел несколько способов сделать это с помощью CardLayouts, но я не использую их для своего JComboBox, поэтому мне, вероятно, нужен другой способ.Я даже не знаю, является ли это обычным способом или есть какой-то другой лучший способ.

1 Ответ

0 голосов
/ 06 декабря 2018

Для обновления пользовательского интерфейса используйте метод panel.revalidate(), panel.repaint() или revalidate().Методы revalidate () и repaint () являются правильным способом отражения задачи обновления пользовательского интерфейса.

...