2012-05-09 18 views
5

से इंस्टेंटिएट जेडियलॉग मुझे JPanel मिला है, जिसे मैं माउस क्लिक का जवाब देना चाहता हूं और फिर JDialog खोलना चाहता हूं। JDialog कन्स्ट्रक्टर को JFrame का उदाहरण चाहिए और JPanel नहीं - मैं इसके आसपास कैसे काम करूं?जेपीनल

+2

क्या आपने जॉप्शनपेन का उपयोग करने पर विचार किया है? – ChadNC

उत्तर

1

एक निर्माता है कि तर्क की जरूरत नहीं है नहीं है:

JDialog dialog = new JDialog(); 

क्या आप चाहते हैं संवाद मोडल बनाने के लिए है, हो सकता है आप की तरह आप मुख्य JFrame की एक स्थिर संदर्भ, कुछ प्राप्त कर सकते हैं:

JDialog dialog = new JDialog(MyMainJFrame.getInstance()); 
3

पैरामीटर मुक्त कन्स्ट्रक्टर का उपयोग करके संवाद मालिक कम हो जाएगा। मुझे लगता है कि करने के लिए सबसे अच्छी बात यह है कि फ्रेम को आपके पैनल के मालिक के संवाद का मालिक बनना होगा।

इसके द्वारा, मेरा मतलब है कि आपको अपने जेपीनल से getParent() का उपयोग अपने मालिक को खोजने के लिए करना चाहिए और फिर इस ऑब्जेक्ट को अपने जेएफआरएएम के मालिक के रूप में मिला।

उस के लिए एक कच्चे कोड

java.awt.Container c = myPanel.getParent(); 
while (!(c instanceof javax.swing.JFrame) && (c!=null)) { 
     c = c.getParent(); 
} 
if (c!=null) { 
    JFrame owner=(javax.swing.JFrame) c; 
    JDialog myDialog=new JDialog(owner); 
} 

मैं इस कोड का परीक्षण नहीं किया होगा, लेकिन यह enought अच्छा आप विचार को समझने के लिए है।

2

यदि आपने जॉप्शनपेन के साथ जाने का फैसला किया है, तो आप माउसक्लिड ईवेंट को संभालने के लिए माउस एडाप्टर आंतरिक कक्षा के साथ जेपीनेल में माउसलिस्टर जोड़ सकते हैं। आंतरिक कक्षा के भीतर से पैनल तक पहुंचने के लिए आपको पैनल फाइनल घोषित करना होगा।

final JPanel testPanel = new JPanel(); 

testPanel.addMouseListener(new MouseAdapter(){ 
    public void mouseClicked(MouseEvent e) 
    {   
     JOptionPane.showMessageDialog(testPanel,"Title","InformationMessage",JOptionPane.INFORMATION_MESSAGE); 

    }});//end of mouseClicked method 
7

आप वास्तव में एक माता पिता संवाद या फ्रेम करने के लिए JDialog संलग्न करने के लिए, खासकर यदि आप यह मोडल चाहते हैं (एक माता पिता खिड़की पारित करके की कोशिश करनी चाहिए, संवाद अपनी खिड़की से जोड़ दी जाएगी और माता पिता को लाने लाएगा बाल संवाद भी)। अन्यथा, उपयोगकर्ता अनुभव वास्तव में गलत हो सकता है:

JPanel panel = new JPanel(); 
Window parentWindow = SwingUtilities.windowForComponent(panel); 
// or pass 'this' if you are inside the panel 
Frame parentFrame = null; 
if (parentWindow instanceof Frame) { 
    parentFrame = (Frame)parentWindow; 
} 
JDialog dialog = new JDialog(parentFrame); 
... 

: खो संवाद, मॉडल संवाद देखे बिना अवरुद्ध खिड़कियां, आदि ...

अपने JPanel माता पिता खिड़की खोजने के लिए, आप सभी की जरूरत के लिए इस कोड है यदि आप नहीं जानते कि आप फ़्रेम या संवाद में हैं, तो दोनों वर्गों के लिए "exampleof" परीक्षण करें।

संबंधित मुद्दे