Java : Swing : Masquer la fenêtre après bouton enfoncé

J'ai un bouton dans une java cadre que lorsqu'il est pressé, il lit une valeur dans un champ de texte et utilise cette chaîne comme un nom de port de la tentative de connexion à un périphérique série.

Si cette connexion est réussie, la méthode renvoie true, sinon elle retourne false. Si elle retourne true je veux le cadre de disparaître. Une série d'autres images spécifiée dans d'autres classes apparaissent alors avec des options pour contrôler le périphérique série.

Mon problème est le suivant: le bouton est connecté à une action de l'auditeur, lorsqu'il est pressé cette méthode est invoquée. Si j'essaie d'utiliser le cadre.setVisible(true); méthode java jette un résumé bouton d'erreur parce que je suis effectivement dire qu'il disparaisse à l'image contenant le bouton devant la presse le bouton de la méthode qu'il a quitté. Enlever le cadre.setVisible(true); autoriser le programme à exécuter correctement cependant, je suis reparti avec une belle persistance cadre de raccordement qui n'est plus d'aucune utilité.

Comment puis-je obtenir le cadre de disparaître en appuyant sur un bouton le bouton?

package newimplementation1;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/**
*
* @author Zac
*/
public class ConnectionFrame extends JPanel implements ActionListener {
private JTextField textField;
private JFrame frame;
private JButton connectButton;
private final static String newline = "\n";
public ConnectionFrame(){
super(new GridBagLayout());
textField = new JTextField(14);
textField.addActionListener(this);
textField.setText("/dev/ttyUSB0");
connectButton = new JButton("Connect");
//Add Components to this panel.
GridBagConstraints c = new GridBagConstraints();
c.gridwidth = GridBagConstraints.REMAINDER;
c.fill = GridBagConstraints.HORIZONTAL;
add(textField, c);
c.fill = GridBagConstraints.BOTH;
c.weightx = 1.0;
c.weighty = 1.0;
add(connectButton, c);
connectButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
boolean success = Main.mySerialTest.initialize(textField.getText());
if (success == false) {System.out.println("Could not connect"); return;}
frame.setVisible(false);  //THIS DOES NOT WORK!!
JTextInputArea myInputArea = new JTextInputArea();
myInputArea.createAndShowGUI();
System.out.println("Connected");
}
});
}
public void actionPerformed(ActionEvent evt) {
//Unimplemented required for JPanel
}
public void createAndShowGUI() {
//Create and set up the window.
frame = new JFrame("Serial Port Query");
frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
//Add contents to the window.
frame.add(new ConnectionFrame());
frame.setLocation(300, 0);
//Display the window.
frame.pack();
frame.setVisible(true);
frame.addComponentListener(new ComponentAdapter() {
@Override
public void componentHidden(ComponentEvent e) {
System.out.println("Exiting Gracefully");
Main.mySerialTest.close();
((JFrame)(e.getComponent())).dispose();
System.exit(0);
}
});
}
}
Il est peu probable que l'application. devrait utiliser plus d'un JFrame. Petits éléments de l'INTERFACE utilisateur peut être sauté dans une JDialog ou JOptionPane tout un CardLayout ou une variété de composants Swing peut être utilisé pour inclure plus d'une INTERFACE utilisateur (ou "écran") dans un récipient.
Pour mieux aider plus tôt, après une SSCCE.

OriginalL'auteur Zac | 2011-09-07