【问题标题】:How to change colors at paint(Graph)如何在绘画中更改颜色(图表)
【发布时间】:2013-04-18 13:49:35
【问题描述】:

我有一个 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 中更改它。

【问题讨论】:

    标签: java swing graphics 2d paint


    【解决方案1】:

    只需在您的类中添加一个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();
                }
            });
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-07-09
      • 1970-01-01
      • 2018-12-10
      • 1970-01-01
      • 2014-08-30
      • 2012-12-14
      • 1970-01-01
      • 2018-01-24
      • 1970-01-01
      相关资源
      最近更新 更多