Comment fermer une fenêtre JFrame avec un JButton cliquez sur l'événement

Je suis nouveau à l'ensemble de Java Swing/AWT boîtes de dialogue (ce qui explique comment des amateurs de cette boîte de dialogue ci-dessous ressemble, toute aide dans l'organisation de mieux est la bienvenue 🙂 et j'ai du mal à fermer cette fenêtre pop-up lorsque l'un des deux JButtons sont cliqués.

J'ai déjà essayé les options comme frame.dispose(), frame.setVisible(false) et même SwingUtilities.getWindowAncestor(this).dispose();

Encore une fois, c'est secondaire, une fenêtre pop-up invoqué par un autre processus en cours d'exécution, donc je veux juste que cette fenêtre pour la fermer et de ne pas affecter le processus principal. Sinon je pourrais utiliser System.exit

Comme je l'ai mentionné, tous les autres suggestions pour améliorer l'aspect général de la boîte de dialogue sont appréciés.

La totalité de mon code est comme ci-dessous:

import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
public class UpgradePopupWindow extends JPanel implements ActionListener {
public static UpgradePopupWindow mainWindow;
static final long serialVersionUID = 0;
final String upgrade = "Continue Upgrade";
final String restore = "Restore";
JPanel panels;
JButton flashMe;
JButton helpMe;
JTextArea Message;
JFrame frame;
protected JTextArea addText(String text, boolean visible, int fontStyle) {
JTextArea textArea = new JTextArea(text);
textArea.setFont(new Font("SansSerif", fontStyle, 12)); //$NON-NLS-1$
textArea.setLineWrap(true);
textArea.setWrapStyleWord(true);
textArea.setEditable(false);
textArea.setForeground(Color.WHITE);
textArea.setOpaque(false);
textArea.setVisible(visible);
textArea.setAlignmentX(Component.CENTER_ALIGNMENT);
add(textArea);
return textArea;
}
public UpgradePopupWindow(Object ft) {
String text = "This is the random text for now. I will bother about the actual content later";
addLabel(text, Font.PLAIN, 12);
flashMe = new JButton(upgrade);
flashMe.setActionCommand("upgrade");
flashMe.addActionListener(this);
flashMe.setEnabled(true);
add(flashMe);
helpMe = new JButton(restore);
helpMe.setActionCommand("restore");
helpMe.addActionListener(this);
helpMe.setEnabled(true);
add(helpMe);
}
protected JLabel addLabel(String text, int fontStyle, int size) {
JLabel label = new JLabel(text);
label.setFont(new Font("SansSerif", fontStyle, size)); 
label.setAlignmentX(Component.CENTER_ALIGNMENT);
label.setOpaque(false);
label.setVisible(true);
label.setForeground(Color.BLUE);
add(label);
return label;
}
public void createGUI(Object obj) {
//Create and set up the frame.
frame = new JFrame("PopUp Dialog");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//create and setup the content pane
UpgradePopupWindow popUpContentPane = new UpgradePopupWindow(obj);
popUpContentPane.setOpaque(true);
frame.setContentPane(popUpContentPane);
frame.pack();
frame.setVisible(true);
}
public void actionPerformed(ActionEvent e) {
if("restore".equals(e.getActionCommand())) {
System.out.println("restore button selected");
frame.dispose();
SwingUtilities.getWindowAncestor(this).dispose();
} else if ("upgrade".equals(e.getActionCommand())) {
System.out.println("upgrade button selected");
frame.dispose();
}
}
}
Je ne peux pas obtenir ma tête autour de vos intentions. Qui appelle la createGUI méthode? Quelle est la Object ft qui est passé au constructeur? J'ai fait quelques suppositions et joué un peu avec ce un peu et le frame.dispose semblait aller bien.
Vous avez dit, vous voulez fermer une fenêtre pop-up déclenchée à partir d'autres méthode main? Si vous n'avez pas une référence, vous ne pouvez pas la fermer. Est-ce panneau utilisé dans la popup?

OriginalL'auteur LambeauLeap | 2010-06-24