2014-10-04 2 views
0

Ниже приведена упрощенная версия моей Java-программы. Он отлично работает, пока я не добавлю строку JComboBox comboBox = new JComboBox (опции);Невозможно получить JComboBox для отображения

После добавления этой строки в окне ничего больше не отображается (без кнопок, без меток, без цветов и т. Д.).

Может кто-нибудь, пожалуйста, помогите мне выяснить, что не так с этой строкой кода (в ней нет синтаксической ошибки).

import java.awt.*; 
import javax.swing.*; 

public class JavaApplication23 { 

    public static void main(String[] args) { 
     JFrame frame = new JFrame(); 
     frame.setLayout(new BorderLayout());   
     frame.setTitle("Test program");   
     frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     frame.setSize(600, 400);   
     frame.setVisible(true);     

     JLabel label = new JLabel("Hello"); 
     JButton button = new JButton("Click"); 
     String[] options = new String[] {"Cat", "Dog"}; 
     JComboBox comboBox = new JComboBox(options);  //It goes wrong when I add this line 

     JPanel topPanel = new JPanel(); 
     JPanel centerPanel = new JPanel(); 
     JPanel bottomPanel = new JPanel(); 

     topPanel.add(label); 
     bottomPanel.add(button); 
     centerPanel.add(comboBox); 

     frame.add(topPanel, BorderLayout.PAGE_START); 
     frame.add(bottomPanel, BorderLayout.PAGE_END); 
     frame.add(centerPanel, BorderLayout.CENTER); 
    }  
} 
+3

Вызов 'setVisible' после того, как все компоненты были добавлены – Reimeus

+0

Большое вам спасибо за вашу помощь. Это решило проблему. – user2939293

ответ

1

Вы можете сделать 2 вещи:

Добавить frame.setVisible(true); в конце или после добавления comboBox в коде вместо условиях.

или

Добавить frame.getRootPane().updateUI(); в конце или после добавления comboBox в коде.

Чтобы добавить вышеуказанный код, когда вы закончите с добавлением или заменой компонентов в дереве, предпочтительнее, то есть в вашем случае в конце вашего метода.

Я ожидаю, что причина проблемы в вашем коде понятна. Но дайте мне знать, если нет.

+0

Это было так просто? Спасибо большое! – user2939293

+0

-1 для предложения updateUI(). Нет необходимости использовать этот метод. Если вы хотите добавить компоненты в видимый GUI, тогда вы должны вызывать 'revalidate()' и 'repaint()'. – camickr

+2

'repaint()' не будет работать в его случае, а 'revalidate()' эквивалентно ** вызову invalidate(), а затем validate() **. а с другой стороны 'updateUI()' работает в его случае, и он сбросит все компоненты пользовательского интерфейса, содержащиеся в нем. – afzalex