2015-04-22 58 views
0

我试图得到一个椭圆形每次大小达到50或100的时间来改变渐变的颜色:如何在JFrame不断重新绘制时设置形状的渐变?

class MyDrawPanel extends JPanel { 
    public void paintComponent(Graphics g) { 

     Graphics2D g2d = (Graphics2D) g; 

     g2d.setColor(Color.white); 
     g2d.fillRect(0, 0, 300, 300); 

     if(dmt == 100 || dmt == 50) { 
      int red = (int) (Math.random() * 256); 
      int blue = (int) (Math.random() * 256); 
      int green = (int) (Math.random() * 256); 
      Color startColour = new Color(red, green, blue); 

      red = (int) (Math.random() * 256); 
      blue = (int) (Math.random() * 256); 
      green = (int) (Math.random() * 256); 
      Color endColour = new Color(red, green, blue); 

      GradientPaint gradient = new GradientPaint(300, 100, startColour, 150, 150, endColour); 
      g2d.setPaint(gradient); 
     } 
     g2d.fillOval((size-dmt)/2, (size-dmt)/2 - dmt/2, dmt, dmt); 
    } 
} 

(DMT是直径大小,来了窗口的大小)

我为我想用于圆的渐变设置了2个随机颜色,但是我希望只有在圆的大小达到100或50(它不断增长并缩小到这些尺寸)时它才会更改,但由于我重新绘制了所有内容每次运行时都是白色的,除非它的大小恰好是50或100,否则你永远不会看到它。我怎样才能使它始终保持那种颜色,直到它必须改变?

+0

帮助呢? http://sourceforge.net/p/tus/code/HEAD/tree/tjacobs/ui/ex/ColorGradient.java – ControlAltDel

回答

2

我该如何让它始终保持那种颜色,直到它不得不改变?

某处你必须有一个方法来改变“dmt”变量。这个方法应该负责改变你的类的属性。因此,除了dmt变量外,您还应该有一个startColorendColor变量。当你创建你还需要到startColor/ENDCOLOR设置为默认值类

public void setDMT(...); 
{ 
    if (dmt == 50 || dmt == 100) 
    { 
     startColor = ??? 
     endColor = ??? 
    } 
} 

然后代码应该是这样的。

然后在的paintComponent()方法,您只需使用这两个varaibles:

Graphics2D g2d = (Graphics2D) g; 

    g2d.setColor(Color.white); 
    g2d.fillRect(0, 0, 300, 300); 

    GradientPaint gradient = new GradientPaint(300, 100, startColour, 150, 150, endColour); 
    g2d.setPaint(gradient); 

    g2d.fillOval((size-dmt)/2, (size-dmt)/2 - dmt/2, dmt, dmt); 
莫非