Цвет исчезает в java - PullRequest
       2

Цвет исчезает в java

0 голосов
/ 25 февраля 2020

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

Поиск пути Visualizer

public void paintComponent(Graphics g) {
        super.paintComponent(g);
        for (int x = 0; x < cells; x++) { //coloring each node
            for (int y = 0; y < cells; y++) {
                switch (map[x][y].getType()) {
                    case 0: //start node
                        g.setColor(Color.GREEN);
                        break;
                    case 1: //end node
                        g.setColor(Color.RED);
                        break;
                    case 2: //wall node
                        g.setColor(Color.BLACK);
                        break;
                    case 3: //empty node
                        g.setColor(Color.WHITE);
                        break;
                    case 4: //visited nodes
                        g.setColor(Color.CYAN);
                        break;
                    case 5: //path
                        g.setColor(Color.YELLOW);
                        break;
                }
                g.fillRect(x * CSIZE, y * CSIZE, CSIZE, CSIZE);
                g.setColor(Color.BLACK); //grid color
                g.drawRect(x * CSIZE, y * CSIZE, CSIZE, CSIZE);
            }
        }
    }

Ответы [ 2 ]

0 голосов
/ 25 февраля 2020

Легко:

int transparency = 0; // Transparency value;
int R = 255, G = 0, B = 0; //Enter your RGB values
Color c; // The color that you can then use in your paint method
Thread t = new Thread() {
   public void run() {
      while (transparency < 255) {
         int transparency = 0;
         c = new Color(R,G,B,transparency); // By creeting a custom color you can define the R, G, B and transparency values
         transparency++;

         try {
         int fadeTime = 1000; // How long the fading process should go
            Thread.sleep(255/fadeTime);
         } catch (Exception e) {}

      }
   }
};

t.start(); // The thread will continue to run in the background until the transparency reaches 255

0 голосов
/ 25 февраля 2020

Вот один из способов. Он использует таймер для периодического уменьшения красного компонента в цветовой схеме rgb.

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

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

public class ColorFadingDemo extends JPanel implements ActionListener {

    Color color = new Color(255,0,0);
    final static int height = 500;
    final static int width = 500;
    final static String title = "default title";

    JFrame frame = new JFrame(title);

    public static void main(String[] args) {
        SwingUtilities.invokeLater(
                () -> new ColorFadingDemo().start());
    }

    public void start() {
       Timer timer = new Timer(0, this);
       timer.setDelay(20);
       timer.start();
    }

    public void actionPerformed(ActionEvent ae) {
       int rgb = color.getRGB();
       rgb -= 0x10000;
       color = new Color(rgb);
       repaint();
    }
    public ColorFadingDemo() {
        frame.setDefaultCloseOperation(
                JFrame.EXIT_ON_CLOSE);
        frame.add(this);
        setPreferredSize(
                new Dimension(width, height));
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }


    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g.create();
        g2d.setRenderingHint(
                RenderingHints.KEY_ANTIALIASING,
                RenderingHints.VALUE_ANTIALIAS_ON);
        g2d.setColor(color);
        g2d.fillRect(100,100,300,300);
        g2d.dispose();

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...