有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

缓慢地变换颜色,Java图形

我有一个渐变背景,我想慢慢地,让它改变颜色,基本上让它通过不同的颜色。颜色必须通过所有颜色混合,我不希望它通过颜色弹,这是可能的吗?请给我一个解决方案,谢谢


共 (2) 个答案

  1. # 1 楼答案

    也考虑^ {CD1>}和A^ {},图解^ here及以下。

    image

  2. # 2 楼答案

    真的很难为我辩护(无论多么聪明),(试着享受)

    enter image description here

    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.image.BufferedImage;
    import java.util.LinkedList;
    import java.util.Queue;
    import java.util.Random;
    import javax.swing.*;
    
    public class GradientPaintWithSwingTimerAndRunnable extends JFrame implements Runnable {
    
        private static final long serialVersionUID = 1L;
        private Queue<Icon> iconQueue = new LinkedList<Icon>();
        private JLabel label = new JLabel();
        private Random random = new Random();
        private JPanel buttonPanel = new JPanel();
        private JPanel labelPanel = new JPanel();
        private Timer backTtimer;
        private Timer labelTimer;
        private JLabel one = new JLabel("one");
        private JLabel two = new JLabel("two");
        private JLabel three = new JLabel("three");
        private final String[] petStrings = {"Bird", "Cat", "Dog",
            "Rabbit", "Pig", "Fish", "Horse", "Cow", "Bee", "Skunk"};
        private boolean runProcess = true;
        private int index = 1;
        private int index1 = 1;
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
    
                @Override
                public void run() {
                    GradientPaintWithSwingTimerAndRunnable t = new GradientPaintWithSwingTimerAndRunnable();
                }
            });
        }
    
        public GradientPaintWithSwingTimerAndRunnable() {
            iconQueue.add(UIManager.getIcon("OptionPane.errorIcon"));
            iconQueue.add(UIManager.getIcon("OptionPane.informationIcon"));
            iconQueue.add(UIManager.getIcon("OptionPane.warningIcon"));
            iconQueue.add(UIManager.getIcon("OptionPane.questionIcon"));
    
            one.setFont(new Font("Dialog", Font.BOLD, 24));
            one.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
            two.setFont(new Font("Dialog", Font.BOLD, 24));
            two.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
            three.setFont(new Font("Dialog", Font.BOLD, 10));
            three.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
            labelPanel.setLayout(new GridLayout(0, 3, 4, 4));
    
            labelPanel.add(one);
            labelPanel.add(two);
            labelPanel.add(three);
            //labelPanel.setBorder(new LineBorder(Color.black, 1));
            labelPanel.setOpaque(false);
    
            JButton button0 = createButton();
            JButton button1 = createButton();
            JButton button2 = createButton();
            JButton button3 = createButton();
    
            buttonPanel.setLayout(new GridLayout(0, 4, 4, 4));
            buttonPanel.add(button0);
            buttonPanel.add(button1);
            buttonPanel.add(button2);
            buttonPanel.add(button3);
            //buttonPanel.setBorder(new LineBorder(Color.black, 1));
            buttonPanel.setOpaque(false);
    
            label.setLayout(new BorderLayout());
            label.add(labelPanel, BorderLayout.NORTH);
            label.add(buttonPanel, BorderLayout.SOUTH);
            Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
            label.setPreferredSize(new Dimension(d.width / 3, d.height / 3));
    
            add(label, BorderLayout.CENTER);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            pack();
            setVisible(true);
            startBackground();
            startLabel2();
            new Thread(this).start();
            printWords(); // generating freeze Swing GUI durring EDT
        }
    
        private JButton createButton() {
            JButton button = new JButton();
            button.setBorderPainted(false);
            button.setBorder(null);
            button.setFocusable(false);
            button.setMargin(new Insets(0, 0, 0, 0));
            button.setContentAreaFilled(false);
            button.setIcon(nextIcon());
            button.setRolloverIcon(nextIcon());
            button.setPressedIcon(nextIcon());
            button.setDisabledIcon(nextIcon());
            nextIcon();
            return button;
        }
    
        private Icon nextIcon() {
            Icon icon = iconQueue.peek();
            iconQueue.add(iconQueue.remove());
            return icon;
        }
    
        // Update background at 4/3 Hz
        private void startBackground() {
            backTtimer = new javax.swing.Timer(750, updateBackground());
            backTtimer.start();
            backTtimer.setRepeats(true);
        }
    
        private Action updateBackground() {
            return new AbstractAction("Background action") {
    
                private static final long serialVersionUID = 1L;
    
                @Override
                public void actionPerformed(ActionEvent e) {
                    label.setIcon(new ImageIcon(getImage()));
                }
            };
        }
    
        // Update Label two at 2 Hz
        private void startLabel2() {
            labelTimer = new javax.swing.Timer(500, updateLabel2());
            labelTimer.start();
            labelTimer.setRepeats(true);
        }
    
        private Action updateLabel2() {
            return new AbstractAction("Label action") {
    
                private static final long serialVersionUID = 1L;
    
                @Override
                public void actionPerformed(ActionEvent e) {
                    two.setText(petStrings[index]);
                    index = (index + 1) % petStrings.length;
                }
            };
        }
    
        // Update lable one at 3 Hz
        @Override
        public void run() {
            while (runProcess) {
                SwingUtilities.invokeLater(new Runnable() {
    
                    @Override
                    public void run() {
                        one.setText(petStrings[index1]);
                        index1 = (index1 + 1) % petStrings.length;
                    }
                });
                try {
                    Thread.sleep(300);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    
        // Note: blocks EDT
        private void printWords() {
            for (int i = 0; i < petStrings.length; i++) {
                String word = petStrings[i].toString();
                System.out.println(word);
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                three.setText(word);
            }
            three.setText("<html> Concurency Issues in Swing<br>"
                    + " never to use Thread.sleep(int) <br>"
                    + " durring EDT, simple to freeze GUI </html>");
        }
    
        public BufferedImage getImage() {
            int w = label.getWidth();
            int h = label.getHeight();
            GradientPaint gp = new GradientPaint(0f, 0f, new Color(
                    127 + random.nextInt(128),
                    127 + random.nextInt(128),
                    127 + random.nextInt(128)),
                    w, w,
                    new Color(random.nextInt(128), random.nextInt(128), random.nextInt(128)));
            BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
            Graphics2D g2d = bi.createGraphics();
            g2d.setPaint(gp);
            g2d.fillRect(0, 0, w, h);
            g2d.setColor(Color.BLACK);
            return bi;
        }
    }