Je suis nouveau dans les boîtes de dialogue Java Swing/AWT (ce qui explique à quel point cette boîte de dialogue ressemble à un amateur, toute aide pour mieux l'organiser est la bienvenue :) et je suis difficulté à fermer cette fenêtre popUp lorsque l'un des deux JButtons sont cliqués.Comment fermer une fenêtre basée sur JFrame avec un événement clic JButton
je l'ai déjà des options éprouvées comme frame.dispose()
, frame.setVisible(false)
et même SwingUtilities.getWindowAncestor(this).dispose();
Encore une fois, ceci est une fenêtre secondaire invoquée par un autre cours d'exécution principal de processus, donc je veux juste cette fenêtre particulière popUp pour fermer et ne pas affecter la principale processus. Sinon, je pourrais utiliser System.exit
Comme je l'ai mentionné, toutes les autres suggestions pour améliorer l'aspect général de la boîte de dialogue sont appréciées.
Mon code entier 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 n'arrive pas à comprendre vos intentions. Qui appelle la méthode 'createGUI'? Quel est le 'Object ft' transmis au constructeur? J'ai fait quelques suppositions et j'ai joué un peu avec ça et le 'frame.dispose' a semblé fonctionner correctement. –
Avez-vous dit, vous voulez fermer une pop-up déclenchée par une autre méthode principale? Si vous n'avez pas de référence, vous ne pouvez pas le fermer. Ce panneau est-il utilisé dans ce popup? – OscarRyz