[英]Can't set color in paintComponent
我正在編寫一個“繪畫”模擬程序(它從HashSets繪制矩形和線條) ,並且在給點和線着色時遇到問題。 這是我的代碼:
package paint;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.geom.Line2D;
import java.awt.geom.Point2D;
import java.util.HashSet;
import javax.swing.JComponent;
public class Draw extends JComponent {
private HashSet<Point2D> points = new HashSet<>();
private HashSet<Line2D> lines = new HashSet<>();
private final int WIDTH = 5, HEIGHT = 5;
private Point2D prevPoint, nextPoint;
public Draw() {
addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
super.mousePressed(e);
if (e.getButton() == MouseEvent.BUTTON1) {
prevPoint = e.getPoint();
points.add(prevPoint);
repaint();
}
}
});
addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseDragged(MouseEvent e) {
super.mouseDragged(e);
nextPoint = e.getPoint();
Line2D line = new Line2D.Double(prevPoint, nextPoint);
lines.add(line);
prevPoint = nextPoint;
repaint();
}
});
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
for (Point2D p : points) {
int x = (int)p.getX() - (WIDTH / 2);
int y = (int)p.getY() - (HEIGHT / 2);
g2d.setColor(getColor());
g2d.fillRect(x, y, WIDTH, HEIGHT);
g2d.drawRect(x, y, WIDTH, HEIGHT);
}
for (Line2D l : lines) {
g2d.setColor(getColor());
g2d.setStroke(new BasicStroke(WIDTH));
g2d.draw(l);
}
}
public Color getColor() {
Tools t = new Tools();
return t.getColor();
}
}
package paint;
import java.awt.Color;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JPanel;
public class Tools extends JPanel {
private Color color;
private JButton button;
private ButtonColor bc;
public Tools() {
makeButton("black", Color.BLACK);
makeButton("green", Color.GREEN);
}
public void makeButton(String name, final Color color) {
bc = new ButtonColor(name, color);
add(new JButton(bc));
}
private class ButtonColor extends AbstractAction {
public ButtonColor(String name, Color color) {
putValue(NAME, name);
putValue(SHORT_DESCRIPTION, "Choose " + name.toLowerCase() + " color");
putValue("color", color);
}
@Override
public void actionPerformed(ActionEvent e) {
color = (Color) getValue("color");
System.out.println(color);
}
}
public Color getColor() {
System.out.println(color);
return color;
}
}
現在,當我按下黑色或綠色按鈕時,控制台將打印java.awt.Color[r=0,g=0,b=0]
或java.awt.Color[r=0,g=255,b=0]
。 但是當我試圖畫線時,它打印為null
。
如何更改Draw.getColor()
方法以使更改顏色成為可能?
每次調用paintComponent
,您使用的是最后設置的顏色。
您需要做的是將顏色與當前活動相關聯,以便在調用paintComponent
時可以查找要繪制的形狀的顏色。
您可以創建一個包含Line
和color值的自定義類,然后將其添加到List中。 繪制Line
,您還將查找要使用的顏色
您需要為您的觀點做同樣的事情
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.