2011-08-01 14 views
8

मेरे पास है paintComponent() फ़ंक्शन के साथ। मैं इसे एक बार कॉल करूंगा, फिर जब उपयोगकर्ता JButton पर क्लिक करेगा, तो मैं कुछ ध्वज सेट करूंगा और इस फ़ंक्शन को फिर से कॉल करना चाहता हूं क्योंकि यह ध्वज सेट होने के बाद कुछ अलग करेगा।जेपीनल ग्राफिक्स समाशोधन और पुनर्भुगतान?

तो यहां मैं क्या सोच रहा हूं: मैं मौजूदा सामग्री को paintComponent से कैसे साफ़ कर सकता हूं? और फिर से निकालने के लिए, क्या मैं बस paintComponent पर कॉल करता हूं?

वर्तमान में मैं कोशिश कर रहा हूँ निम्नलिखित:

if (flag2==true) { 
    g.drawRect(...); 
} else { 
    g.drawLine(...); 
} 

लेकिन परीक्षण मैं क्या कर रहा हूँ के साथ ऐसा लगता है कि वहाँ कुछ गड़बड़ है की तरह के माध्यम से:

flag2 = true; 
repaint(); //I expect (want) paintComponent to be called again 

रंग घटक में, मैं सामान पसंद करते हैं करते हुए।

किसी भी मदद के लिए धन्यवाद।

+0

आप पेंट कॉम्पोनेंट विधि के भीतर से पेंटेंट() को कॉल नहीं कर रहे हैं, है ना? क्या आप सुनिश्चित हैं कि पुनर्निर्मित() कॉल उस पैनल से जुड़ा हुआ है जिसे आप ताज़ा करना चाहते हैं? (उदा। myPanel.repaint())? –

उत्तर

14

जब आप पैनल की संपत्ति को बदल तो आप को लागू करने की जरूरत है:

panel.repaint(); 

पैदा करने के लिए घटक रंगा किया जाना है।

तो विधि paintComponent() में पहले बयान किया जाना चाहिए:

super.paintComponent(g); 

यह पृष्ठभूमि रंग होगा इसलिए अब आप अपने कस्टम पेंटिंग कर सकते हैं।

यदि आपको और सहायता की आवश्यकता है तो अपनी SSCCE पोस्ट करें जो समस्या का प्रदर्शन करता है।

2

सबसे पहले, बुलियन के बजाय एनम का उपयोग क्यों न करें?

enum Enum { 
    RECTANGLE, 
    LINE, 
    CIRCLE 
} 

Enum choice = RECTANGLE; //default to RECTANGLE 

switch(choice) { 
    // case RECTANGLE, LINE, CIRCLE 
} 

आपकी समस्या के संबंध में, क्या आप अपने प्रश्न में मेरी टिप्पणियों का उत्तर दे सकते हैं?

+0

मेरे पास तर्क ठीक है, मैं शायद enum का उपयोग कर सकता हूं लेकिन जो कुछ भी मेरी समस्या नहीं है। मेरी समस्या यह है कि मुझे सभी तैयार ग्राफिक्स को साफ़ करने की आवश्यकता है और फिर इस जेपीनल के लिए फिर से पेंट कॉम्पोनेंट को कॉल करें। – JDS

+0

आपको जो भी चाहिए वो हासिल करने के लिए आपको सभी ग्राफिक्स को साफ़ करने की आवश्यकता नहीं है। –

+0

कैमिकर का जवाब देखें, अगर आप जो कुछ भी रेखांकित नहीं कर रहे हैं, तो उस पर ध्यान केंद्रित करें। –

2

मैं पुनर्निर्मित(); repaint() के बजाय। आकार/लेआउट को बदलते समय या जब आप अपने जेपीएनल पर ऑब्जेक्ट्स जोड़ते/हटाते हैं तो उसे पुनः सत्यापित करने की आवश्यकता होती है और इसके सभी बच्चों को अपडेट कर दिया जाएगा। जो मैं कह सकता हूं, उससे आप अभी भी एक ही पेंट ऑब्जेक्ट का उपयोग कर रहे हैं लेकिन इसके लेआउट को बदल रहे हैं।

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