Un composite ne s'affichent pas dans JFrame - Java
Serveur est une classe que j'ai fait qui s'étend JFrame.
Server serverApp = new Server(TITLE, WIDTH, HEIGHT, true, false);
J'ai effectivement enlevé presque tous les autres code, mais le problème reste encore!
c = getContentPane();
c.setLayout(new BorderLayout());
//Components /***AHHHHH***/
lblEnterMessage = new JLabel("Enter Message ");
txtEnterMessage = new JTextField(50);
txtEnterMessage.addActionListener(this);
btnSend = new JButton("Send");
btnSend.addActionListener(this);
taDisplay = new JTextArea("Test, test test.", 10, 0);
taDisplay.setEditable(false);
JScrollPane jspDisplay = new JScrollPane(taDisplay);
pnlChatTop = new JPanel(new FlowLayout());
pnlChatTop.add(lblEnterMessage);
pnlChatTop.add(txtEnterMessage);
pnlChatTop.add(btnSend);
pnlChat = new JPanel(new BorderLayout());
pnlChat.add(pnlChatTop, BorderLayout.CENTER);
pnlChat.add(jspDisplay, BorderLayout.SOUTH);
c.add(pnlChat, BorderLayout.CENTER);
Oh, bon sang, c'est arrivé... Et j'ai été sur le point de supprimer cette question, mais j'ai couru de nouveau à quelques reprises et juste au hasard fonctionne et ne FONCTIONNE pas de temps en temps.
Je viens de me souvenir d'avoir ce problème avant avec d'autres "projets" et ma solution a été de rendre la fenêtre redimensionnable. Chaque fois que j'ai simplement redimensionnée il, les composants d'affichage.
Ce moment, je suis en train de faire un jeu et je ne veux pas être redimensionnables... et je veux savoir comment résoudre ce problème pour de bon et dans la bonne façon de toute façon.
Aider! Personne ne sait pourquoi ce qui se passe?
Grâce.
Edit:
public Server(String title, int sizeW, int sizeH, boolean visibility, boolean resizability) {
/* Initialization */
//JFrame settings
setTitle(title);
setSize(sizeW, sizeH);
setVisible(visibility);
setResizable(resizability);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
addKeyListener(this);
Cela aidera?
OriginalL'auteur Dois | 2010-01-30
Vous devez vous connecter pour publier un commentaire.
Le problème n'est pas visible à partir du code que vous avez fournis.
Il semble que vous voulez une combinaison de la pack(), setSize(int,int), setExtendedState(int) et/ou setResizable(boolean) méthodes avant de faire appel à setVisible(true).
Edit:
Il y a une condition de concurrence dans le présent code. Parfois, le thread principal obtiendrez les composants dans l'état correct pour être peint avant l'image s'affiche; parfois, l'image gagne et commence à peindre avant tout est prêt.
La chose sur l'utilisation de Swing, c'est que vous êtes automatiquement de travail avec le code multithread. Bien qu'il est généralement préférable d'initialiser les contrôles sur le thread principal, une fois que vous cause la event dispatch thread pour commencer (comme
setVisible(true)
va sûrement faire), tous les paris sont éteints.Délai d'appel
setVisible(true)
aussi longtemps que possible. De préférence, ne pas l'appeler à partir de votreJFrame
constructeur.Si vous avez besoin de modifier Swing contrôles après que vous avez lancé votre application, vous aurez besoin de le faire via les event dispatch thread (voir la
invokeLater
etinvokeAndWait
méthodes de SwingUtilities, entre autres).jetez un oeil à la simultanéité dans le Swing tutoriel - java.sun.com/docs/books/tutorial/uiswing
l'appel de la JFrame (mon Serveur de classe) dans invokeLater semble fonctionner. Merci UNE TONNE de gars, a sauvé beaucoup de mon temps et de guérir mon mal de tête.
OriginalL'auteur McDowell
Pannes intermittentes de ce genre suggèrent des problèmes de synchronisation. Assurez-vous de créer et d'exécuter votre GUI sur le HAE. En outre, vous pourriez voir cette très simple, ~100 ligne, GUI programme de chat.
OriginalL'auteur trashgod
L'appel à setVisible est trop tôt. Il s'exécute immédiatement et peintures à la fenêtre au moment où elle est appelée. Si vous n'avez ajouté tous les composants de l'Image) alors qu'ils ne sont pas peints. C'est pourquoi le redimensionnement de l'image semble faire apparaître. Parce que le redimensionnement provoque mise à exécution.
Faire setVisible le dernier appel dans votre JFrame du constructeur.
OriginalL'auteur Vincent Ramdhanie