2012-04-11 13 views
7

के शीर्ष पर दिखाई देने की आवश्यकता है मेरा एप्लिकेशन एक लंबे समय से चलने वाले कार्य को लॉन्च करने की क्षमता प्रदान करता है। जब ऐसा होता है तो मॉडल की JDialog कार्य की प्रगति दिखाती है। मैं विशेष रूप से संवाद मॉडल बना देता हूं ताकि उपयोगकर्ता को जीयूआई के बाकी हिस्सों के साथ बातचीत करने की अनुमति मिल सके।मॉडरलेस जेडियलॉग को पैरेंट

मुझे जिस समस्या का सामना करना पड़ रहा है वह यह है कि यदि डेस्कटॉप पर अन्य विंडो के पीछे संवाद छिपा हुआ है तो यह पता लगाना मुश्किल हो जाता है: टास्क बार (विंडोज 7 पर) पर कोई संबंधित आइटम नहीं है, न ही कोई आइकन दिखाई देता है Alt + टैब मेनू के नीचे।

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

+0

क्यों आप एक JFrame बजाय का उपयोग नहीं करते? यह मुख्य मतभेदों में से एक है: टास्कबार में बटन। –

+0

क्योंकि मैं नहीं चाहता कि संवाद कार्यक्षमता को अधिकतम या कम करने की पेशकश करे। – Adamski

+0

आप setResizable (झूठी) का उपयोग कर सकते हैं; मैं कम करने की अनुमति दूंगा, अन्यथा, एप्लिकेशन थोड़ा आक्रामक हो सकता है, आईएमओ। –

उत्तर

8

आप एक गैर-मोडल संवाद बना सकते हैं और इसे मूल फ्रेम/संवाद दे सकते हैं। जब आप पैरेंट फ्रेम/संवाद लाते हैं, तो यह गैर-मोडल संवाद भी लाता है।

कुछ इस तरह यह दिखाता है:

public static void main(String[] args) throws IOException { 
    JFrame frame = new JFrame(); 
    frame.setTitle("frame"); 
    JDialog dialog = new JDialog(frame, false); 
    dialog.setTitle("dialog"); 
    final JButton button = new JButton("Click me"); 
    button.addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      JOptionPane.showMessageDialog(button, "Hello"); 
     } 
    }); 
    final JButton button2 = new JButton("Click me too"); 
    button2.addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      JOptionPane.showMessageDialog(button2, "Hello dialog"); 
     } 
    }); 
    frame.add(button); 
    dialog.add(button2); 
    frame.pack(); 
    dialog.pack(); 
    frame.setVisible(true); 
    dialog.setVisible(true); 
} 
+0

धन्यवाद - यह एक इलाज करता है। ऐसा लगता है कि मैं एक मूल घटक के सापेक्ष संवाद का स्थान सेट कर रहा था लेकिन वास्तव में मालिक के साथ जेडियलॉग नहीं बना रहा था। – Adamski

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