10
Mam pytanie dotyczące joptionpane.Jak programowo zamknąć okno komunikatu?
Za pomocą JOptionPane.showMessageDialog (...) możemy utworzyć okno dialogowe wiadomości. Ale jak zamknąć programowo?
Mam pytanie dotyczące joptionpane.Jak programowo zamknąć okno komunikatu?
Za pomocą JOptionPane.showMessageDialog (...) możemy utworzyć okno dialogowe wiadomości. Ale jak zamknąć programowo?
Zawsze można uzyskać odniesienie do JOptionPane, pobierając WindowAncestor z dowolnego komponentu, który trzyma, a następnie zadzwonić pod numer dispose()
lub setVisible(false)
w oknie zwróconym. Okno można uzyskać stosując SwingUtilities.getWindowAncestor(component)
na przykład:
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class CloseOptionPane {
@SuppressWarnings("serial")
private static void createAndShowGui() {
final JLabel label = new JLabel();
int timerDelay = 1000;
new Timer(timerDelay , new ActionListener() {
int timeLeft = 5;
@Override
public void actionPerformed(ActionEvent e) {
if (timeLeft > 0) {
label.setText("Closing in " + timeLeft + " seconds");
timeLeft--;
} else {
((Timer)e.getSource()).stop();
Window win = SwingUtilities.getWindowAncestor(label);
win.setVisible(false);
}
}
}){{setInitialDelay(0);}}.start();
JOptionPane.showMessageDialog(null, label);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
Nic więcej niż idealny .... –
ktoś może odliczyć znaki z tym jednym, LOL, nie sądzę więc +1 do tego ładnie wykonany przykład :-) –
Dzięki. Kluczem jest jednak wywołanie całego niezbędnego kodu przed wyświetleniem JOptionPane. –