【问题标题】: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();
}
});
}
}