2009-07-11 5 views
3

Je programme ma toute première application graphique en Java en utilisant le framework Swing. J'ai codé un système de connexion de base en utilisant les classes JTextField, JPasswordField et JButton. Maintenant, j'écris la méthode actionPerformed pour le bouton, que je veux supprimer ces éléments car ils ne sont plus nécessaires, mais je ne suis pas sûr de la meilleure façon d'y parvenir.Java GUI Design Advice

J'ai envisagé d'utiliser la méthode setVisible de ces composants, ce qui semble fonctionner, mais je suis sûr que ce n'est pas la meilleure façon de le faire. Désolé si c'est un peu une question bête ..

+0

Que voulez-vous dire en les supprimant? Changez-vous dinamiquement votre seul écran? – akarnokd

+0

Ouais, c'est ce que j'essaie de faire de toute façon ... c'est juste un peu déroutant, car il n'y a aucune référence à la JFrame réelle contenant les composants. – mportiz08

+0

Utilisez-vous un éditeur graphique pour votre application ou vous le composez manuellement? Pouvez-vous nous montrer des exemples de code? Il y a toujours le ** this ** dans un JFrame – akarnokd

Répondre

5

Avez-vous séparé votre boîte de dialogue de connexion de votre fenêtre principale. Lorsque vous avez terminé avec la connexion, cachez simplement la boîte de dialogue de connexion.

Vous pouvez également enregistrer vos champs de texte et boutons dans un champ de classe, puis appeler remove (Component) pour chacun d'entre eux.

+0

Est-il recommandé de définir Visible, ou de supprimer? –

+0

Je suis en faveur de la séparation. Mon login est généralement un popup comme un dialogue modal. J'ai rarement besoin de changer le contenu d'un jpanel - cause des problèmes avec la gestion de la disposition. – akarnokd

+3

Si vous utilisez un dialogue - voir JDialog - alors vous auriez normalement disposé() quand c'est fini – kdgregory

1

Généralement, vous voudriez pouvoir faire ceci dans une ligne de code. Donc, vous devriez envisager d'emballer les différentes choses que vous aimeriez montrer ou cacher dans un JPanel. Ensuite, vous pouvez afficher ou masquer dynamiquement les JPanels.

+1

Si vous changez le contenu du JFrame, il est implicitement repaint() - ed. – akarnokd

+0

Mis à jour pour refléter cela. – JoshJordan

0

Je suis d'accord avec la suggestion JPanel. Ajoutez les composants de connexion à un JPanel, puis masquez le JPanel dès qu'il y a une connexion.

+0

masquer le panneau de connexion une fois que l'utilisateur clique sur une connexion réussie –

+0

C'est la même logique que le JDialog indiqué ci-dessus ... avoir un JPanel séparé pour un login, puis le cacher une fois que l'utilisateur a un login réussi –

+0

I trouver ceci plus facile pour l'utilisateur parce qu'il n'y a aucune fenêtre séparée ouverte sur l'écran. J'espère que cette révision aidera! –

0

Je vais vous suggérer d'utiliser un JDialog pour votre connexion. Après une connexion réussie, vous devez simplement appeler "dialog.dispose()", puis charger votre interface. Si l'application que vous construisez besoin d'afficher plusieurs fenêtres vous devriez envisager d'utiliser un JDesktopPane (http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JDesktopPane.html)

1

Vous pourriez avoir une connexion JPanel, qui est mis en place et affiché et une fois le mot de passe de l'utilisateur est vérifié, vous pouvez afficher votre application JPanel. Cela peut facilement être fait en utilisant un CardLayout.

Il traite chaque composant dans le conteneur comme une carte. Une seule carte est visible à la fois, et le conteneur agit comme une pile de cartes.

Here is a tutorial.

L'utilisation d'un CardLayout, votre code pourrait ressembler à ceci:

variables d'instance:

static final String LOGINPANEL = "LOGINPANEL"; 
static final String MAINPANEL = "MAINPANEL"; 
JPanel cards; 

où vos panneaux sont créés:

JPanel loginPanel = new JPanel(); 
//add your stuff to the login panel 
JPanel mainPanel = new JPanel(); 
//add your stuff to the main panel 

cards = new JPanel(new CardLayout()); 
cards.add(loginPanel, LOGINPANEL); 
cards.add(mainPanel, MAINPANEL); 

puis lorsque votre mot de passe est vérifié, dans le thread AWT, vous pouvez le faire:

CardLayout cl = (CardLayout)(cards.getLayout()); 
cl.show(cards, MAINPANEL);