Witam. Mam mały problem, od pewnego czasu w z JFrame znikają mi komponenty. Wygląda to tak, dodaje panel, w nim rozmieszczam komponenty, 1 uruchomienie jest git. Kolejne, nie widać już żadnych komponentów, jedynie pusty JFrame. Wystarczy, że zmienię położenie przynajmniej 1 komponentu i ponownie widzę wszystkie. Lecz przy kolejnych kompilacjach kodu - komponenty znikają. Jakiś pomysł jak to rozwiązać? Przez długi czas nie miałem takich problemów, wszystko było w porządku. Od jakiegoś czasu ta sytuacją powtarza się ciągle.
Być może za wcześnie (przed dodaniem komponentów) wywołujesz setVisible(true).
Niestety, moment wywoływania setVisible jest tutaj bez znaczenia. Wypróbowałem kilka możliwości.
Ma znaczenie.
http://docs.oracle.com/javase/7/docs/api/java/awt/Component.html#setVisible%28boolean%29
http://docs.oracle.com/javase/7/docs/api/java/awt/Container.html#add%28java.awt.Component%29
Jeśli dodajesz coś po tym, to powinieneś wywoływać:
http://docs.oracle.com/javase/7/docs/api/java/awt/Container.html#validate%28%29
Dobrze by było, gdybyś pokazał kawałek kodu, z którym tak ci się dzieje.
Czyli przykladowo:
JFrame a = new JFrame();
JPanel b = new JPanel();
JButton c = new JButton();
a.setVisible();
a.add(b);
b.add(c);
a.validate();
?
Przykładowy JFrame w którym występuje ten problem.
public class Frame {
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
public Frame(){
JFrame okno = new JFrame();
okno.setVisible(true);
okno.setSize(200, 150);
okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
okno.setBackground(new Color(150,150,190));
okno.setLocation(400, 240);
okno.setResizable(false);
JPanel panel = new JPanel();
okno.add(panel);
panel.validate();
JTextArea login = new JTextArea();
panel.add(login);
login.setBounds(60,40,40,20);
JTextArea pass = new JTextArea();
panel.add(pass);
pass.setBounds(100, 70, 40, 20);
}
public static void main(String args[]){
Frame a = new Frame();
}
}
Problem rozwiązany. Wystarczyło dodać panel.setLayout(null);. Wszystkim udzielającym się, dziękuje za dobre chęci:)