2010-06-12 8 views
12

Exemple maintenant j'ai un cadre principal contient jtable afficher toutes les informations client, et il y avait un bouton créer pour ouvrir un nouveau JFrame qui permettent à l'utilisateur de créer un nouveau client. Je ne veux pas que l'utilisateur puisse ouvrir plus d'un cadre de création. Tout composant swing ou API peut le faire? ou comment peut désactivé le cadre principal? Quelque chose comme JDialog. Il suffit d'utiliser firstFrame.setVisible(false) sur la première image.Comment désactiver JFrame principal lorsque ouvert nouveau JFrame

Répondre

11

Je suggère que vous créez un dialogue modal JDialog pour que vous n'autorisiez pas la saisie d'autres dialogues/cadres dans votre application tant qu'elle est visible. Jetez un oeil à la modality tutorial pour plus de détails.

+0

Salut, il fait exactement ce que je veux. Merci beaucoup – user236501

+0

D'autre part, les interfaces utilisateur modales sont * très * ennuyantes, alors pensez à refondre l'interface graphique pour permettre d'éditer plusieurs utilisateurs différents en même temps. – KarlP

1

Il sera caché ..

si vous voulez une approche plus générale, vous pourriez avoir une référence à l'image affichée en cours quelque part et le changer quand une nouvelle demande de cadre à afficher

JFrame currentFrame; 

void showRequest(JFrame frame) 
{ 
    currentFrame.setVisible(false); 
    currentFrame = frame; 
    currentFrame.setVisible(true); 
} 
+0

Je veux que le cadre principal reste là, je veux juste m'assurer que l'utilisateur n'ouvre qu'un seul cadre de création. Je pensais à désactivé au bouton, mais y a-t-il d'autres bonnes pratiques à mettre en œuvre? – user236501

+1

vous pouvez essayer avec __. SetFocusable (false) __, cela gardera le cadre, mais l'utilisateur ne sera pas autorisé à cliquer sur quelque chose à l'intérieur .. – Jack

+0

Merci pour votre suggestion. J'ai essayé de le faire comme createButton.addActionListener (nouveau java.awt.event.ActionListener() {public void \t actionPerformed (java.awt.event.ActionEvent e) {\t \t \t \t \t ... \t createFrame.setVisible (true); \t mainframe.setFocusable (false); } }); Mais je peux toujours cliquer sur le bouton créer sur le cadre principal? – user236501

17

Je pense que vous devriez utiliser ce code pour le principal JFrame lorsque vous essayez d'ouvrir une nouvelle:

this.setEnabled(false);

+2

si simple et effectivement répondre à la question OP, vous avez m'aider. –

+0

Parfait, aurait dû être la réponse acceptée à "comment désactiver le cadre principal." Je vous remercie! – corporateWhore

2

Désolé pour la réponse tardive mais avez-vous considéré comme le modèle de conception Singleton? Il retournera la même instance d'une classe quand vous voulez la classe. Donc, si l'utilisateur veut un cadre pour entrer dans les détails, il n'y aura qu'un seul cadre ouvert (même instance)

Il va quelque chose comme ceci:

private static MySingleFrame instance = null; //global var 

private MySingleFrame() { } //private constructor 
private static MySingleFrame getInstance() 
{ 

if(instance == null) 
{ 
instance = new MySingleFrame(); 
} 

//returns the same instance everytime MySingleFrame.getInstance() is called 
return instance; 


} 
1

Vous pouvez utiliser:

private void btn_NewFormActionPerformed(java.awt.event.ActionEvent evt) { 

      this.hide(); 
      new Frm_NewFormUI().setVisible(true); 

}