这里的目标是我可以点击颜色和形状,然后点击figurePanel上的两个点。那个彩色的形状填充在figurePanel上,我可以在彼此的顶部添加形状等。我还需要将当前日期显示在figurePanel的角落,在所有绘制的形状的顶部。我能够创建形状(虽然它们总是覆盖日期)没有问题,但每当我调整大小或最小化窗口时,所有绘制的形状都会消失。我已经尝试从Graphics(更新,绘画,重绘等)实现了很多不同的方法,但没有找到解决这个问题的方法。我以为paintComponent()会处理所有这些,但显然不是。随意指出任何可以以更好的方式实施的东西,总是乐于学习新东西。
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
drawFigures();
figuresPanel.add(dateLabel, c);
}
@Override
public Dimension getPreferredSize() {
return (new Dimension(800, 600));
}
private void addFigure(Figure figure) {
figureList.add(figure);
listArea.append(figure.toString() + "\n");
figure.fill(getGraphics());
}
private void drawFigures() {
for (Figure f : figureList) {
f.fill(getGraphics());
}
}
答案 0 :(得分:2)
我会建议一些可能对你有帮助的事情。
在您的方法drawFigures()
而不是getGraphics()
中,为什么不将Graphics
中的paintComponentMethod
实例作为参数传递给方法,用它来绘制对象。这将确保您使用的是您用于绘制的Graphics
的相同实例。
在您的方法addFigure(Figure figure)
中,我建议您删除行figure.fill(getGraphics());
,以完全绘制对象。而是在mouseClicked(MouseEvent event)
语句后插入switch
方法:
revalidate();
repaint();
这实际上应该照顾对象的绘制完全在用于显示组件的同一Graphics
对象上完成。
我希望这会有所帮助。