2013-01-16 173 views
6

我使用Google搜索,但无法找到正确的答案。我有一个JPanel,我希望它有一个从上到下的渐变。我只打算使用两种颜色。我怎样才能做到这一点?JPanel渐变背景

+0

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

+5

我谷歌搜索“摇摆jpanel背景颜色渐变”,这是第一个链接: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不错的例子,虽然Id建议覆盖'JPanel'的'getPreferredSize()'并在'JFrame'上调用'pack()'而不是调用'setSize(..)' –

+0

@DavidKroukamp'setSize()'调用是为了在屏幕上显示一些东西。我不想在这种情况下重写'getPreferredSize()',因为我的理解是Panel将在以后实际用于设置LayoutManager并添加组件,因此'getPreferredSize()'应该由该LayoutManager计算并且不是任意大小。无论如何,这只是挑剔,我相信这两种解决方案都是可以接受的。 –

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

     } 

    }; 

希望帮助; 你也可以回到这个ARTICAL更多的帮助: Gradient background to any jcomponent

+0

我打电话给这个BS。你很诚实地链接到源代码是很好的。但是,源代码是正确的,并且您以错误的方式修改了它。提示:'JComponent.setOpaque(false);'是一个关键因素,'super.paintComponent(grphcs);'必须是最后一次调用。否则,你的代码将不能用于所有'JComponent'对象,并且对于未来的任何变化它都不是健壮的。但是,感谢指针。 –