मेरे पास एक स्टैंडअलोन जावा एप्लिकेशन है जो डेटाबेस से डेटा प्राप्त करता है और इसे जेटीबल में प्रदर्शित करता है। जब एप्लिकेशन शुरू होता है, तो उपयोगकर्ता को JDialog में उपयोगकर्ता नाम/पासवर्ड के लिए संकेत दिया जाता है। एक बार सही क्रेडेंशियल दर्ज किए जाने के बाद, डेटा युक्त मुख्य जेफ्रेम प्रदर्शित होता है। मुख्य जेएफआरएएम पर मेरे पास एक लॉगआउट बटन है, जब क्लिक किया गया है, तो मुख्य जेएफआरएम बंद करना चाहिए और लॉगिन जेडियलॉग को फिर से चलाएं। सब कुछ ज्यादातर काम कर रहा है सिवाय इसके कि मुझे पता चला है कि लॉगआउट बटन क्लिक होने पर मुख्य जेफ्रेम दूर नहीं जाता है।जावा स्विंग निपटान() बनाम सेट दृश्य (झूठा)
Main.java:
import javax.swing.SwingUtilities;
public class Main {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new MainFrame();
}
});
}
}
MainFrame.java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
public class MainFrame extends JFrame implements ActionListener {
private JButton button;
private MyDialog dialog;
public MainFrame() {
super("this is the JFrame");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
dialog = new MyDialog(this);
button = new JButton("click me to hide this JFrame and display JDialog");
button.addActionListener(this);
add(button);
pack();
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
setVisible(false); // works when changed to dispose();
dialog.setVisible(true);
}
}
MyDialog.java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
public class MyDialog extends JDialog implements ActionListener {
private JFrame parentFrame;
private JButton button;
public MyDialog(JFrame parentFrame) {
super(parentFrame, "this is the JDialog", true);
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
this.parentFrame = parentFrame;
button = new JButton("click me to hide JDialog and show JFrame");
button.addActionListener(this);
add(button);
pack();
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
setVisible(false);
parentFrame.setVisible(true);
}
}
नीचे मेरी कोड का एक छोटा काम कर उदाहरण है
मेनफ्रेम.जेवा यदि मैं setVisible(false)
से dispose()
कहता हूं तो उस पंक्ति को बदलता है तो जब मैं बटन क्लिक करता हूं तो जेएफआरम दूर हो जाता है। मेरा सवाल है, यह dispose()
के साथ क्यों काम करता है और setVisible(false)
के साथ नहीं? क्या मेरे कोड को व्यवस्थित करने का कोई बेहतर तरीका है? मैं स्विंग के लिए नया हूं इसलिए अगर मैं एक मूल प्रश्न पूछता हूं तो मैं क्षमा चाहता हूं। धन्यवाद।
संपादित 2011-10-19 10:26 पीडीटी
आपकी मदद के लिए आप सभी को धन्यवाद। मैंने जेडियलॉग को एक शून्य माता-पिता के रूप में बदल दिया और अब सबकुछ काम करता है जैसा मैं चाहता था।
dialog = new MyDialog(this);
आप माता-पिता फ्रेम कि संवाद पर बैठता है के रूप में ही फ्रेम स्थापित कर रहे हैं:
जल्दी ही, पोस्ट एक [SSCCE] (http: // pscode। org/sscce.html)। –