Swing JComboBox странное поведение - PullRequest
0 голосов
/ 22 декабря 2011

Я наблюдаю следующее поведение (на платформе Windows 7):

import java.awt.*;
import javax.swing.*;
public class Main extends JFrame{   
    JPanel p;
    JComboBox<String> l;
    JLabel title;
    public static void main(String[] arg){
      Main m = new Main();
      m.setVisible(true);
      m.setSize(400,400);
      m.p = new JPanel();
      //m.l = new JComboBox<String>();
      m.title = new JLabel("HELLO"); 
      m.p.add(m.title);
      m.setContentPane(m.p);
      }
}

Отображает HELLO, но если я раскомментирую строку, которая создает экземпляр JComboBox, он ничего не отобразит. Что может вызвать это? Вы можете воспроизвести ошибку?

1 Ответ

2 голосов
/ 23 декабря 2011

Решение из моего комментария:

Перемещение m.setVisible(true); в конце.

Еще один комментарий от Йенс Шаудер :

Ваш код также должен работать в EDT. Все остальное просит Проблема

Может быть, он хочет сказать что-то вроде этого:

Все, что касается компонентов Swing, включая конструкцию , должно выполняться в EDT . Если этого не произойдет, он сломан, хотя вы можете этого не заметить.

Для этого вы можете переместить свою логику из основного метода в конструктор класса и вызвать конструктор следующим образом:

public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new Main();
            }
        });
    }

Вы также можете написать логику в другом методе, кроме конструктора.

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