2015-03-24 4 views
-1

Ну, у меня проблемы, когда экземпляр Jcombox не является проблемой кода (я думаю), это просто, что когда экземпляр JCombox, кнопки ai create, не отображаются в моем окне до тех пор, пока не измените размер окна , и они появляютсяЭкземпляр JComboBox

public class ventana extends JFrame { 

     static JCheckBox ch1; 
    static JCheckBox ch2; 
    static JCheckBox ch3; 
    static ButtonGroup bg; 
    static JComboBox cb; 
public static void main(String[] args) { 

    JFrame jf = new JFrame("asd"); 
    jf.setVisible(true); 
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    jf.setSize(200,320); 
    jf.setLayout(new FlowLayout(FlowLayout.CENTER)); 
    ch1 = new JCheckBox(); 
    ch2 = new JCheckBox(); 
    ch3 = new JCheckBox(); 
    String [] x= {"1","2","3"}; 
    cb = new JComboBox(x); 
    cb.addItem("Asdd"); 
    cb.addActionListener(e ->{ 

    }); 
    bg = new ButtonGroup(); 
    bg.add(ch1); 
    bg.add(ch2); 
    bg.add(ch3); 

    jf.add(ch1); 
    jf.add(ch2); 
    jf.add(ch3); 
    jf.add(cb); 


} 

}

Примечание: Я стараюсь с JPanel тоже и та же проблема, и перекрашивать() тоже!

Примечание: приложение оленья кожа имеет никакого fuctionality, я просто хочу знать, как для решения этой проблемы

UPDATE: чтобы решить эту проблему вы только должны поставить «jf.setVisible (истинный);» в конце.

+0

'jf.repaint()' –

+0

Не использовать статические переменные для вас GUI компонентов. Для этого нет оснований. Начните с чтения учебника Swing в [Как использовать комбо-боксы] (http://docs.oracle.com/javase/tutorial/uiswing/components/combobox.html), например, кода, который лучше структурирован. – camickr

ответ

2

Установите JFrame на видимый после добавления всех ваших компонентов.

Это связано с тем, что вы добавляете свои компоненты ПОСЛЕ того, как ваш JFrame нарисован на экране (путем установки видимого значения на true), поэтому, если вы установите видимость на true после добавления компонентов, она будет краска с добавленными вами компонентами.

Причина, по которой это будет выглядеть только после изменения размера окна, заключается в том, что изменение размера окна заставляет его снова рисовать (и, как упоминалось в комментариях @camickr, заставляет диспетчер компоновки вызывать и позиционировать элементы, поскольку вы не давая им размер).

Если вы хотите перекрасить свой JFrame после того, как вы его установили, вы также можете использовать jf.revalidate(), а затем jf.repaint().

Код:

JFrame jf = new JFrame("asd"); 
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
jf.setSize(200,320); 
jf.setLayout(new FlowLayout(FlowLayout.CENTER)); 
ch1 = new JCheckBox(); 
ch2 = new JCheckBox(); 
ch3 = new JCheckBox(); 
String [] x= {"1","2","3"}; 
cb = new JComboBox(x); 
cb.addItem("Asdd"); 
cb.addActionListener(e ->{ 

}); 
bg = new ButtonGroup(); 
bg.add(ch1); 
bg.add(ch2); 
bg.add(ch3); 

jf.add(ch1); 
jf.add(ch2); 
jf.add(ch3); 
jf.add(cb); 
jf.setVisible(true); //This is where you want to set your JFrame to visible 
+0

OH! Спасибо, что работает! но почему это случилось? я не понимаю хорошо! – Raxor

+0

Обновлено с пояснениями. – chrissukhram

+0

1+, @ Raxor, когда компонент создан, он имеет размер (0, 0), поэтому рисовать нечего. Когда вы изменяете размер кадра, вызывается менеджер компоновки, а компоненту присваивается соответствующий размер и местоположение. – camickr

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