2013-01-16 55 views
6

मैं googled लेकिन कोई सही जवाब नहीं मिल सका। मेरे पास JPanel है और मैं चाहता हूं कि यह ढाल हो जो ऊपर से नीचे तक आती है। मैं बस दो रंगों का उपयोग करने जा रहा हूँ। इसे कैसे प्राप्त किया जा सकता है?जेपीनल ढाल पृष्ठभूमि

+0

http://docs.oracle.com/javase/1.4.2/docs/api/java/ awt/GradientPaint.html – MikeTheLiar

+5

मैं "स्विंग jpanel पृष्ठभूमि रंग ढाल" के लिए googled और यह पहला लिंक है: http://www.javarichclient.com/how-to-add-a-gradient-background-to-any-jcomponent/लगता है कि –

उत्तर

6

ये रहा:

import java.awt.Color; 
import java.awt.GradientPaint; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.RenderingHints; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 

public class TestPanel extends JPanel { 

    @Override 
    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     Graphics2D g2d = (Graphics2D) g; 
     g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); 
     int w = getWidth(); 
     int h = getHeight(); 
     Color color1 = Color.RED; 
     Color color2 = Color.GREEN; 
     GradientPaint gp = new GradientPaint(0, 0, color1, 0, h, color2); 
     g2d.setPaint(gp); 
     g2d.fillRect(0, 0, w, h); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       JFrame frame = new JFrame(); 
       TestPanel panel = new TestPanel(); 
       frame.add(panel); 
       frame.setSize(200, 200); 
       frame.setLocationRelativeTo(null); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setVisible(true); 
      } 
     }); 
    } 
} 
+0

+1 अच्छा उदाहरण है, हालांकि आईडी 'जेपीनेल' के 'getPreferredSize()' को ओवरराइड करने और 'सेट आकार (..)' –

+0

@DavidKroukamp 'setSize()' कॉल को कॉल करने के बजाय 'JFrame' पर 'पैक()' को कॉल करने का सुझाव देता है स्क्रीन पर कुछ दिखने के लिए है। मैं इस मामले में 'getPreferredSize() 'को ओवरराइड नहीं करना चाहता क्योंकि मेरी समझ यह है कि पैनल को बाद में वास्तव में लेआउटमैनेजर सेट करने और घटकों को जोड़ने के लिए उपयोग किया जाएगा, इसलिए' getPreferredSize()' को उस लेआउटमैनेजर द्वारा गणना की जानी चाहिए और एक मनमाना आकार नहीं है। वैसे भी, यह सिर्फ नाइटपिकिंग है और मेरा मानना ​​है कि दोनों समाधान समान रूप से स्वीकार्य हैं। –

+0

मैं व्यक्तिगत रूप से LinearGradientPaint पसंद करता हूं, लेकिन यह जरूरतों पर निर्भर करता है;) – MadProgrammer

4

हे Bebbie आप इस का उपयोग कर सकते हैं:

JPanel contentPane = new JPanel() { 
     @Override 
     protected void paintComponent(Graphics grphcs) { 
      super.paintComponent(grphcs); 
      Graphics2D g2d = (Graphics2D) grphcs; 
      g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
        RenderingHints.VALUE_ANTIALIAS_ON); 
      GradientPaint gp = new GradientPaint(0, 0, 
        getBackground().brighter().brighter(), 0, getHeight(), 
        getBackground().darker().darker()); 
      g2d.setPaint(gp); 
      g2d.fillRect(0, 0, getWidth(), getHeight()); 

     } 

    }; 

आशा व्यक्त की कि मदद; आप कर सकते हैं भी वापस अधिक मदद के लिए इस लेख को: Gradient background to any jcomponent

+0

जानकारी है, मैं इस पर बीएस को कॉल करता हूं। यह अच्छा है कि आप स्रोत से जुड़ने के लिए पर्याप्त ईमानदार हैं। हालांकि, स्रोत में यह सही है, और आपने इसे गलत तरीके से संशोधित किया है। संकेत: 'JComponent.setOpaque (झूठा); 'एक महत्वपूर्ण कारक है और' super.paintComponent (grphcs); 'अंतिम कॉल होना आवश्यक है। अन्यथा, आपका कोड सभी 'JComponent' ऑब्जेक्ट्स के साथ काम नहीं करेगा और यह भविष्य में हुए किसी भी बदलाव के बारे में भी मजबूत नहीं होगा। लेकिन सूचक के लिए धन्यवाद। –