2011-09-14 9 views
5

मेरे पास एक साधारण वर्ग है जो जेपीनल में ग्राफिक चित्रित करता है। यह मेरी कक्षा है:मेरी कक्षा में paintComponent() विधि को कौन कॉल कर रहा है?

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Graphics; 
import javax.swing.JPanel; 

class Drawing_panel extends JPanel { 
    public void paintComponent(Graphics g) { 
    super.paintComponent(g);  
    this.setBackground(Color.white); 
    g.setColor(Color.red); 
    g.fillRect(150, 80, 20, 20); 
} 

public Dimension getPreferredSize(){ 
    return new Dimension(500,500); 
} 

}

मैं एक वर्ग है कि इस को दर्शाता है एक:

Drawing_panel dp = new Drawing_panel(); 

वहाँ Drawing_panel वर्ग और/या या तो करने के लिए कोई स्पष्ट कॉल में कोई निर्माता है paintComponent() या getPreferredSize() विधियां। मुझे लगता है कि विधि JPanel कन्स्ट्रक्टर में विधि कहा जा रहा है, लेकिन मुझे वहां कॉल नहीं दिखाई दे रही थीं।

+0

कृपया जावा नामकरण सम्मेलनों को सीखें और उन्हें चिपकाएं – kleopatra

उत्तर

6

paintComponent कुछ अलग-अलग स्थानों से बुलाया जाता है। JComponent.paint से कॉल शायद वह है जिसे आप ढूंढ रहे हैं।

ध्यान दें कि paintComponentकिसी भी निर्माता से नहीं कहा जाता है। paintComponent को "ऑन-डिमांड" कहा जाता है यानी जब सिस्टम निर्णय लेता है कि घटक को फिर से खींचा जाना आवश्यक है। (उदाहरण के लिए जब घटक का आकार बदलता है, या जब विंडो को कम से कम राज्य से बहाल किया जाता है।) स्पष्ट होने के लिए: घटक "चित्रित नहीं किया गया है, फिर उपयोग किया जाता है", यह "उपयोग किया जाता है, फिर आवश्यक होने पर चित्रित किया जाता है"।

पेंटिंग-कॉल की यह पूरी श्रृंखला कुछ भी नहीं है जिसके बारे में आपको परेशान होना चाहिए, क्योंकि इसे पूरी तरह से स्विंग और तथाकथित इवेंट डिस्पैच थ्रेड द्वारा ख्याल रखा जाता है।

3

जब आप ग्राफिक्स खींचने के लिए जेकंपोनेंट या जेपीनेल को उपclass करते हैं, तो paintComponent() विधि को ओवरराइड करें। इस विधि को बुलाया जाता है क्योंकि उपयोगकर्ता ने ऐसे उपयोगकर्ता इंटरफ़ेस के साथ कुछ किया है जिसे पुन: निकालना आवश्यक है, या आपके कोड ने स्पष्ट रूप से अनुरोध किया है कि इसे फिर से खींचा जाए। जब यह दिखाई देता है स्वचालित रूप से कॉल किया जाता है जब कोई विंडो दिखाई देती है (अनदेखा या deminimized) या आकार बदलता है, तो "सिस्टम" स्वचालित रूप से स्क्रीन के सभी क्षेत्रों के लिए paintComponent() विधि को कॉल करता है जिसे फिर से खींचा जाना है।

+0

@ जोनास - अंतर्दृष्टिपूर्ण प्रतिक्रियाओं के लिए धन्यवाद, खासकर repaint() विधि के उपयोग के संबंध में। वह काम में आ जाएगा। – jamesTheProgrammer

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