2013-10-11 3 views
4

Я запрограммировал JFrame, который добавляет JPanel, и это добавляет мой JCombobox. Моя проблема в том, что JCombobox не будет отображаться до тех пор, пока я не изменю размер моего фрейма.Перемещение JFrame для правильного отображения JCombobox

Вот мой код:

/* JFrame */ 
    frame = new JFrame("Frame"); 
    frame.setBounds(0, 0, 900, 800); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setVisible(true); 

    /* JPanels */ 
    panel = new JPanel(); 
    panel.setBounds(frame.getBounds()); 
    panel.setVisible(true); 
    panel.setLayout(null); 
    panel.addMouseListener(m); 

    /* JComboBox */ 
    String comboBoxListe[] = { "1", "2", "3" }; 
    JComboBox chooser = new JComboBox(comboBoxListe); 
    chooser.setSize(200, 25); 
    chooser.setLocation(30, 30); 
    chooser.setVisible(true); 

    panel.add(chooser); 
    frame.add(panel); 

Может кто-то увидеть, что я сделал не так? Спасибо за вашу помощь :)

+0

Какую версию Java вы используете? Этот же код работает нормально. Похоже, что проблема больше, чем то, что вы представили. –

+0

Как вы думаете, может быть, другая проблема? – InformatikBabo

ответ

2

JFrame был сделан видимым перед окном со списком было добавлен

frame.setVisible(true); 

Убедитесь в этом появляется после компонент добавляются

Свинга была разработана для layout managers быть используется - используйте один здесь

+0

+1 Так как я думаю, что setVisible вызывает проблему. Но также для рекомендации использования менеджеров компоновки, поскольку это действительно основная проблема здесь. – sage88

+0

Спасибо, он отлично работал. НО Я думал, что это тоже будет хорошо работать с frame.repaint(), и у меня есть один (не размещен здесь). И я использую layoutmanager ... – InformatikBabo

+0

@InformatikBabo, 'НО Я думал, что это тоже будет хорошо работать с frame.repaint()' - всякий раз, когда вы добавляете/удаляете компоненты в видимый графический интерфейс, вам нужно вызвать revalidate () (чтобы вызвать диспетчер компоновки), а затем перерисовать() (чтобы нарисовать компоненты по их новому размеру/местоположению). Вам нужно всего лишь сделать это на панели, которая изменится, а не на фрейм. – camickr

Смежные вопросы