2010-08-08 4 views
3

J'ai créé une interface graphique (appelée ParameterUI) avec le constructeur d'interface graphique Netbeans et maintenant je veux créer une instance de celui-ci et l'afficher. Cependant, l'utilisationJava - setVisible (true) n'a aucun effet sur l'interface graphique

ParameterUI gui = new ParameterUI(); 
gui.setVisible(true); 

ne provoque pas de fenêtre à apparaître ... Les tests montrent que, après ces commandes, retourne gui.isVisible() vrai, mais gui.isValid() est faux. Appeler gui.revalidate() n'a aucun effet non plus.

Dans la classe ParameterUI, la méthode constructeur est généré par Netbeans et est tout simplement

public class ParameterUI extends javax.swing.JPanel { 
    public ParameterUI() { 
     initComponents(); 
    } 
} 

initComponents est simplement une liste où chaque DPanel etc. seront placés. La chose étrange est que lorsque j'ai fait une pratique GUI avec le tutoriel à http://netbeans.org/kb/docs/java/gui-functionality.html, l'interface graphique a été définie comme la classe principale en dépit de n'avoir aucune méthode principale et l'interface graphique est apparue de son propre chef. Malheureusement, je suis novice en matière de GUI (j'utilise le constructeur car je n'ai pas le temps d'apprendre à créer une interface graphique à la main), mais quelqu'un peut-il me dire comment rendre mon GUI visible? ? Je peux fournir plus de code si nécessaire ...

EDIT: J'ai essayé

JFrame window = new JFrame(); 
ParameterUI gui = new ParameterUI(); 
window.setContentPane(gui); 
window.pack(); 
window.setVisible(true); 

après avoir lu un court tutoriel sur JFrames, mais il ne semble pas changer quoi que ce soit ...

+0

je pourrais être en mesure d'aider, je viens juste de commencer à utiliser constructeur NetBeans et je suis à mi-chemin à travers une application de bureau. Croyez-moi, j'ai rencontré beaucoup de problèmes avec le constructeur de l'interface graphique de netbeans !! Pourriez-vous fournir plus de code et d'informations comme: est-ce que vous êtes une classe principale (classe GUI) un FrameView ou un SingleFrameApplication ou ... etc ??? –

Répondre

1

Utilisez-vous un JFrame ou avez-vous créé une application de bureau avec Netbeans? Parce que si vous avez créé une application de bureau, Netbeans a sa propre classe qu'il utilise et j'ai eu beaucoup de problèmes avec lui aussi ... ainsi, je vous suggère d'utiliser un JFrame. Toute façon, vous pouvez essayer de voir si l'interface utilisateur lance:

SwingUtilities.invokeLater(new Runnable() { 
      public void run() 
      { 
       ParameterUI gui = new ParameterUI(); 
       gui.setVisible(true); 
      } 
     }); 

Puisque vous étendez le JPanel, vous devrez mettre votre panneau sur un JFrame pour être visible. Pour ce faire, dans netbeans, créez simplement un nouveau JFrame (faites un clic droit sur le paquet et sélectionnez "New JFrame".) Maintenant, revenez à votre panneau, sur votre marge gauche (sous Project, Files, etc) vous devriez avoir un item nommé "Inspecteur" Cliquez sur cela et vous devriez voir une arborescence de vos composants.Cliquez avec le bouton droit sur les JPanels que vous voulez avoir visible et sélectionnez "Copier".Revenez au JFrame qui vient d'être créé, trouvez le bouton "Inspector" dans la marge de gauche, cliquez dessus et en haut, vous devriez avoir un objet nommé "[JFrame]". Faites un clic droit sur cet élément et sélectionnez coller. Vous devriez maintenant voir le panneau que vous avez créé.

Pour afficher le panneau puis il suffit de mettre le nom du JFrame au lieu de ParameterUI

+0

L'EDT ne devrait rien affecter – TheLQ

+0

Ce n'est pas une application de bureau. – Stella

+0

Oui, ça marche enfin! Merci beaucoup, cela me dérange depuis des lustres. – Stella

3

setVisible() sur un Component définit un drapeau dans ce composant (entre autres choses que vous ne vous souciez pas vraiment à ce stade). Ce drapeau est vérifié par le conteneur qui contient votre composant pour voir si le composant doit être affiché.

setVisible() sur un Window contrôle si la fenêtre est affichée sur l'écran. Maintenant, tout ce qu'il fait, c'est faire apparaître ou disparaître votre fenêtre. Généralement, vous voulez lui donner une taille et un emplacement avant de le rendre visible. pack() et setLocationRelativeTo() sont utiles ici.

Donc, pour voir votre IUG, soit ParameterUI doit étendre Window (probablement JFrame ou JDialog) ou il doit être contenu dans une fenêtre et vous devez appeler setVisible(true) sur la fenêtre au lieu de l'instance ParameterUI. Un exemple simple de le faire est (non testé):

// expected to be called on the AWT/Event Dispatch Thread 
public void show(ParameterUI ui) { 
    JFrame frame = new JFrame(); 
    frame.setLayout(new BorderLayout()); 
    frame.add(ui, BorderLayout.CENTER); 
    frame.pack(); 
    frame.setLocationRelativeTo(null); // position in the center of the screen 
    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
    frame.setVisible(true); 
} 
+0

ParameterUI semble étendre un JPanel, et non un JFrame. Il a donc besoin d'une fenêtre (JFrame ou similaire) pour le rendre visible. – extraneon

+0

ParameterUI étend un JPanel, puisque c'est ainsi que Netbeans génère le code. Um, alors comment est-ce que je le mets dans une fenêtre/JFrame? Dois-je le changer pour étendre JFrame, ou devrais-je en créer un et ajouter mon instance "gui" d'une manière ou d'une autre? – Stella

+0

J'ai modifié ma réponse en expliquant comment déplacer le panneau vers un JFrame :) – npinti

Questions connexes