फिर, कुंजी संवाद मोडल है या है?
यदि यह मोडल है, तो विंडोलिस्टर की आवश्यकता नहीं है क्योंकि आपको पता चलेगा कि संवाद का निपटारा किया गया है क्योंकि संवाद आपके कॉल के नीचे तुरंत setVisible(true)
पर कॉल पर फिर से शुरू होगा। यानी, यह काम करना चाहिए:
projectDialog = new FilePathDialog();
projectDialog.setVisible(true);
doWork(); // will not be called until the dialog is no longer visible
यह मोड कम है, तो एक WindowListener काम करना चाहिए है तो दूसरी तरफ हैं, और आप की संभावना कोड यहाँ नहीं दिखाया में एक और समस्या मिल गया है, और आप पोस्ट करने के लिए चाहता हूँ हमारे विश्लेषण, चलाने और संशोधित करने के लिए sscce।
gpeche के लिए संपादित करें
कृपया इस SSCCE पता चलता है कि डिफ़ॉल्ट समापन मानकों के 3 प्रकार खिड़की श्रोता को गति प्रदान करेगा बाहर की जाँच:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class DialogClosing {
private static void createAndShowGui() {
JFrame frame = new JFrame("DialogClosing");
JPanel mainPanel = new JPanel();
mainPanel.add(new JButton(new MyAction(frame, JDialog.DISPOSE_ON_CLOSE, "DISPOSE_ON_CLOSE")));
mainPanel.add(new JButton(new MyAction(frame, JDialog.HIDE_ON_CLOSE, "HIDE_ON_CLOSE")));
mainPanel.add(new JButton(new MyAction(frame, JDialog.DO_NOTHING_ON_CLOSE, "DO_NOTHING_ON_CLOSE")));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
class MyAction extends AbstractAction {
private JDialog dialog;
private String title;
public MyAction(JFrame frame, int defaultCloseOp, final String title) {
super(title);
dialog = new JDialog(frame, title, false);
dialog.setDefaultCloseOperation(defaultCloseOp);
dialog.setPreferredSize(new Dimension(300, 200));
dialog.pack();
dialog.addWindowListener(new WindowAdapter() {
@Override
public void windowClosed(WindowEvent e) {
System.out.println(title + " window closed");
}
@Override
public void windowClosing(WindowEvent e) {
System.out.println(title + " window closing");
}
});
this.title = title;
}
@Override
public void actionPerformed(ActionEvent arg0) {
dialog.setVisible(true);
}
}
स्रोत
2011-10-21 21:26:33
क्या यह एक मॉडल संवाद है? यदि ऐसा है तो आप एक विंडो श्रोता नहीं जोड़ेंगे, विशेष रूप से संवाद दिखाई देने के बाद। इसके बजाए, जब 'projectDialog.setVisible (true) के बाद की रेखा के साथ लाइन को तब तक निपटाया गया है,' पहुंच गया है। –
क्या आप विंडो को दृश्यमान बनाने से पहले श्रोता जोड़ने का प्रयास करते थे? –
इससे कोई फर्क नहीं पड़ता। यदि एक मोडल डायलॉग (जो आप पर संकेत दे रहे हैं), कोड सेट दृश्य (सत्य) के बाद सही फिर से शुरू होगा, इसलिए श्रोता के लिए कोई आवश्यकता नहीं होगी। यदि एक गैर-मोडल संवाद होता है, तो श्रोता तब भी काम करेगा जब इसे जोड़ा जाए। –