java - 如何在绘画时改变颜色(图)

标签 java swing graphics 2d paint

我有一个 JPanel 中的绘画代码,但我不知道如何在方法 paint() 之外更改颜色

我给出代码:

public void paint(Graphics g) {
        Graphics2D g2 = (Graphics2D) g;
        g2.setColor(Color.RED);
        for (Shape linea : lineas) { // dibuja todos las elipses
            g2.draw(linea);
        }
    }

我只知道使用 g2.setColor(Color.RED); 在该方法中更改颜色,但我想在 MenuItem 的 actionListener 中更改它。

最佳答案

只需在您的类中添加一个Color 变量,并使用该变量来设置您的Graphics 的颜色。覆盖 paintComponent 而不是 paint 也更合适,并且始终建议调用 super 方法。

请参阅此随机设置面板颜色的示例。

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;

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

public class TestColoredPanel {

    private static class ColoredPanel extends JPanel {

        private Color color = Color.RED;

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.setColor(getColor());
            g.fillRect(0, 0, getWidth(), getHeight());
        }

        public Color getColor() {
            return color;
        }

        public void setColor(Color color) {
            this.color = color;
            repaint();
        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(300, 200);
        }

    }

    protected void initUI() {
        final JFrame frame = new JFrame(TestColoredPanel.class.getSimpleName());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        final ColoredPanel panel = new ColoredPanel();
        frame.add(panel);
        JButton button = new JButton("Click me");
        button.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                Random r = new Random();
                panel.setColor(new Color(r.nextInt(256), r.nextInt(256), r.nextInt(256)));
            }
        });
        frame.add(button, BorderLayout.SOUTH);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new TestColoredPanel().initUI();
            }
        });
    }
}

关于java - 如何在绘画时改变颜色(图),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16084808/

相关文章:

java - JPA : not overriding equals() and hashCode() in the entities?

java - SwingWorker get()卡住接口(interface)

opengl - VTK(可视化工具包)与 OSG(OpenSceneGraph),其他?

java - 如何使图像生成在 Java 中可扩展?

java - maven项目更新时Eclipse Kepler无法设置Java jdk 1.8

java - FlatFileItemWriter 无法创建新文件或更新现有文件

java - 两个 JPanel 之间的水平粘合未按预期发挥作用

java - java中的sql变量查询

java - 旋转矩形并计算角点

java - 为什么 .equals() 方法没有被 Java 中的基元数组覆盖?