2014-09-06 1 views
0

Я использую java swing для создания интерфейса, в котором пользователь рисует пару точек. Я хочу, чтобы после того, как эти точки были сделаны, чтобы автоматически изменить интенсивность цвета от действительно яркого до темного, пока точка не исчезнет. Кто-нибудь знает какие-либо руководства по изменению интенсивности цвета, потому что я не могу найти что-то, что может мне помочь.Как изменить интенсивность цвета в приложении java swing

EDIT: Спасибо за ответы, они помогли мне лучше понять, как работать с цветом. Я исправил его, поэтому я загружаю часть потока, чтобы помочь, если кому-то еще нужно что-то сделать ... Я работаю на черном фоне, чтобы затемнить цвета вместо их освещения.

public class MyThread extends Thread { 

    private Canvas canvas; 
    private int sleepingTime = 5000; 
    private Color color; 
    private int red, green, blue, alpha; 

    public MyThread(Canvas canvas) { 
     super(); 
     this.canvas = canvas; 
     setDaemon(true); 

    } 

    public void run(){ 
     while (true){ 
      try { 
       System.out.println("going to sleep..."); 
       Thread.sleep(sleepingTime); 

      } catch (InterruptedException e) { 
       System.out.println("sleep interrupted.."); 
       return; 
      } 
      System.out.println("woke up!"); 
       int size = canvas.points_list.size(); 
       int i =0; 
       while (size > 0) { 
        color = canvas.points_list.get(i).getForeground(); 

        red = (int) Math.round(Math.max(0, color.getRed() - 255 * 0.25f)); 
        green = (int) Math.round(Math.max(0, color.getGreen() - 255 * 0.25f)); 
        blue = (int) Math.round(Math.max(0, color.getBlue() - 255 * 0.25f)); 

        alpha = color.getAlpha(); 

        canvas.points_list.get(i).setForeground(new Color(red, green, blue, alpha)); 
        size--; 
        i++; 
       } 

       canvas.repaint(); 
     } 
    } 
} 
+2

Там десятки способов вы можете достичь этого, для [например] (HTTP: //stackoverflow.com/questions/18648142/creating-brighter-color-java/18648235#18648235) – MadProgrammer

+0

Или этот [пример] (http://stackoverflow.com/a/18691662/230513) с использованием 'Color.getHSBColor() '. – trashgod

+0

Чтобы угаснуть цвет, я увеличил бы альфа-компонент. –

ответ

0

Вы должны использовать форму RGB, чтобы сделать его как градиент от светлого к темному, добавляя синий и зеленый, и удерживая значение красного же, делать это постоянно в цикле, то в конце установите вам цвет фона делает его невидимым.

0

Посмотрите на цветную модель HSB. Он позволяет указать «интенсивность» (насыщенность и яркость).

Пример (красный фон становится черным - в качестве альтернативы, измените параметр «S» для увядающого цвета на белый):

final Frame frame = new Frame(); 

Timer timer = new Timer(500, new ActionListener() { 

    float b = 1.0f; 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     int color = Color.HSBtoRGB(0, 1, b); 
     frame.setBackground(new Color(color)); 

     b -= 0.05f; 
    } 
}); 
timer.start(); 

frame.setSize(200, 200); 
frame.setVisible(true);