2012-04-13 23 views
9

मेरे पास फॉलोइंग कस्टम जेपीनल है और मैंने नेटबींस जीयूआई बिल्डर का उपयोग करके इसे अपने फ्रेम में जोड़ा है लेकिन पृष्ठभूमि नहीं बदलेगी! मैं g.fillOval() के साथ ड्राइंग, सर्कल देख सकता हूँ। क्या गलत है?जेपीनल सेटबैकग्राउंड (रंग। ब्लैक) कुछ भी नहीं करता

public class Board extends JPanel{ 

    private Player player; 

    public Board(){ 
     setOpaque(false); 
     setBackground(Color.BLACK); 
    } 

    public void paintComponent(Graphics g){ 
     super.paintComponent(g); 
     g.setColor(Color.red); 
     g.fillOval(player.getxCenter(), player.getyCenter(), player.getRadius(), player.getRadius()); 
    } 

    public void updatePlayer(Player player){ 
     this.player=player; 
    } 
} 

उत्तर

14

यदि आपका पैनल 'अपारदर्शी' नहीं है (पारदर्शी) तो आप अपना पृष्ठभूमि रंग नहीं देखेंगे।

+0

"पृष्ठभूमि रंग केवल तभी प्रयोग किया जाता है जब घटक अपारदर्शी है ..." - ['सेटबैकग्राउंड()'] (http://docs.oracle.com/javase/6/docs/api/ javax/स्विंग/JComponent.html # setBackground% 28java.awt.Color% 29)। – trashgod

+8

+1, ओपी 'setOpaque (false)' लिख रहा है और अभी भी रंग दिखने की अपेक्षा करता है :( –

14

आप super.paintComponent(); रूप में अच्छी तरह कॉल करने के लिए, जावा एपीआई मूल पृष्ठभूमि आकर्षित अनुमति देने के लिए किया है। सुपर मूल जेपीनल कोड को संदर्भित करता है।

public void paintComponent(Graphics g){ 
    super.paintComponent(g); 

    g.setColor(Color.red); 
    g.fillOval(player.getxCenter(), player.getyCenter(), player.getRadius(), player.getRadius()); 
} 
+0

मैं कोशिश की है कि पहले (googling के बाद यह पाया जाता है), लेकिन यह समस्या का समाधान नहीं करता है :( –

+0

मुझे यकीन नहीं है, लेकिन हालांकि पैनल को अपारदर्शी होना चाहिए। –

+0

मैंने कोशिश भी की है, कोई बदलाव नहीं :) –

3

मैं सिर्फ एक नंगे हड्डियों कार्यान्वयन करने की कोशिश की और यह सिर्फ काम करता है:

public class Test { 

    public static void main(String[] args) { 
      JFrame frame = new JFrame("Hello"); 
      frame.setPreferredSize(new Dimension(200, 200)); 
      frame.add(new Board()); 
      frame.pack(); 
      frame.setVisible(true); 
    } 
} 

public class Board extends JPanel { 

    private Player player = new Player(); 

    public Board(){ 
     setBackground(Color.BLACK); 
    } 

    public void paintComponent(Graphics g){ 
     super.paintComponent(g); 
     g.setColor(Color.red); 
     g.fillOval(player.getCenter().x, player.getCenter().y, 
      player.getRadius(), player.getRadius()); 
    } 
} 

public class Player { 

    private Point center = new Point(50, 50); 

    public Point getCenter() { 
     return center; 
    } 

    private int radius = 10; 

    public int getRadius() { 
     return radius; 
    } 
} 
+0

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

2

आप बोर्ड निर्माता में एक नया JPanel वस्तु बनाने के लिए की जरूरत है। उदाहरण

public Board(){ 
    JPanel pane = new JPanel(); 
    pane.setBackground(Color.ORANGE);// sets the background to orange 
} 
3
setOpaque(false); 

के लिए

setOpaque(true); 
+0

शायद आप कुछ शब्दों में व्याख्या कर सकते हैं कि पोस्टर के कोड में क्या समस्या है और फिर आपका समाधान क्या है। धन्यवाद! –

-1

करने के लिए बदल आदेश में पूरी तरह से किसी दिए गए रंग की पृष्ठभूमि सेट करने के लिए:

1) पहला सेट पृष्ठभूमि रंग

2) कॉल विधि "साफ़ करें (0,0, this.getWidth(), this.getHeight()) "(घटक पेंट क्षेत्र की चौड़ाई और ऊंचाई)

मुझे लगता है कि यह पृष्ठभूमि सेट करने की मूल प्रक्रिया है ... मुझे एक ही समस्या है।

एक और उपयोगी संकेत: यदि आप किसी विशेष क्षेत्र (जैसे मास्क या "छेद") में नहीं खींचना चाहते हैं, तो "छेद" आकार (किसी भी आकार) के साथ ग्राफिक्स की setClip() विधि को कॉल करें और फिर साफ़() विधि को कॉल करें (पृष्ठभूमि को पहले "छेद" रंग पर सेट किया जाना चाहिए)।

आप क्लिप क्लिप() (किसी भी बार जब चाहें) कॉल करके विधि जटिल क्लिपक्लिप() को क्लिपिंग आकार के चौराहे के लिए अधिक जटिल क्लिप जोन बना सकते हैं।

मैं यूनियनों या क्लिप क्षेत्रों, केवल चौराहों, बहुत बुरा के विपरीत घटनाओं के लिए कोई भी तरीका नहीं मिला ...

आशा है कि यह मदद करता है

+0

यह उत्तर बहुत अस्पष्ट है, ओपी के लिए कोई फर्क नहीं पड़ता यादृच्छिक विषयों में चला जाता है, और चरण 2 संकलित भी नहीं करता है, या शायद यह करता है, लेकिन कहा गया विधि के लिए कोई संदर्भ नहीं दिया गया है। कम से कम, यह जेपीनल या जेएफआरएएम की सदस्य विधि के रूप में मौजूद नहीं है। कृपया अधिक संदर्भ दें और अपनी पोस्ट में संक्षिप्त रहें। – kevr

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