2013-01-16 12 views
6

degrade arka plan. Bir JPanel sahibiyim ve bunun aşağıdan yukarıya doğru bir degrade olmasını istiyorum. Ben sadece iki renk kullanacağım. Bunu nasıl başarabilirim?JPanel Ben googled ama hiçbir doğru cevabı bulabiliriz

+0

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

+5

ben "Swing JPanel arka plan rengi gradyan" için Google'da ve bu ilk link: http://www.javarichclient.com/how-to-add-a-gradient-background-to-any-jcomponent/Bu bilgi için BS'yi –

cevap

6

gitmek:

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 güzel bir örnek, İd geçersiz kılma önermek olsa 'getPreferredSize()' JPanel' 've çağıran' paketi() 'JFrame'' üzerinde oldukça çağırmaktan daha 'setSize (..)' –

+0

@DavidKroukamp 'setSize()' çağrı Ekranda görünür bir şey olması gerekiyordu. Bu durumda getPreferredSize() işlevini geçersiz kılmak istemiyorum çünkü benim anlayışım, Panel'in daha sonra bir LayoutManager ayarlamak ve bileşenleri eklemek için kullanılmaya başlamasıdır, bu nedenle, 'getPreferredSize()' bu LayoutManager tarafından hesaplanmalı ve keyfi bir boyut değil. Her neyse, bu sadece nitpicking ve ben her iki çözümün de eşit derecede kabul edilebilir olduğuna inanıyorum. –

+0

Ben şahsen LinearGradientPaint tercih, ama ihtiyaçlara bağlıdır;) henüz bakmak için bir şans alamadım @MadProgrammer – MadProgrammer

4

hey Bebbie bunu kullanabilirsiniz:

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()); 

     } 

    }; 

umut yardım olduğunu; da yapabilirsiniz geriye fazla yardım için bu ARTICAL için: İşte Gradient background to any jcomponent

+0

aradım. Kaynağa bağlanacak kadar dürüst olman güzel. Ancak, kaynak doğru ve yanlış bir şekilde değiştirdiniz. İpucu: '(yanlış) JComponent.setOpaque;' önemli bir faktördür ve 'super.paintComponent (grphcs) 'dir;' son çağrı olması gerekiyor. Aksi takdirde, kodunuz tüm 'JComponent' nesneleriyle çalışmaz ve gelecekteki değişikliklerle ilgili olarak da sağlam değildir. Ama işaretçi için teşekkürler. –