绘制的图形在调整大小时闪烁然后消失window
Drawn graphics flicker and then disappear when resizing window
这里的目标是我可以单击颜色和形状,然后单击图形面板上的两个点。该彩色形状填充在图形面板上,我可以在彼此之上添加形状等。我还需要在图形面板的一角显示当前日期,在所有绘制的形状之上。我能够创建形状(尽管它们总是覆盖日期)没问题,但每当我调整 window 的大小或最小化时,所有绘制的形状都会消失。我已经尝试从 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());
}
}
我会建议一些可能对您有帮助的事情。
在你的方法drawFigures()
中而不是使用getGraphics()
,你为什么不把paintComponentMethod
中Graphics
的实例作为参数传递到方法并使用它来绘制对象。这将确保您在用于绘画的 Graphics
的同一实例上绘图。
在您的方法 addFigure(Figure figure)
中,我建议您删除行 figure.fill(getGraphics());
,以完全绘制对象。而是在 mouseClicked(MouseEvent event)
方法中 switch
语句后插入:
revalidate();
repaint();
这实际上应该注意对象的绘制是在用于显示组件的同一个 Graphics
对象上完成的。
希望对您有所帮助。
这里的目标是我可以单击颜色和形状,然后单击图形面板上的两个点。该彩色形状填充在图形面板上,我可以在彼此之上添加形状等。我还需要在图形面板的一角显示当前日期,在所有绘制的形状之上。我能够创建形状(尽管它们总是覆盖日期)没问题,但每当我调整 window 的大小或最小化时,所有绘制的形状都会消失。我已经尝试从 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());
}
}
我会建议一些可能对您有帮助的事情。
在你的方法
drawFigures()
中而不是使用getGraphics()
,你为什么不把paintComponentMethod
中Graphics
的实例作为参数传递到方法并使用它来绘制对象。这将确保您在用于绘画的Graphics
的同一实例上绘图。在您的方法
addFigure(Figure figure)
中,我建议您删除行figure.fill(getGraphics());
,以完全绘制对象。而是在mouseClicked(MouseEvent event)
方法中switch
语句后插入:revalidate(); repaint();
这实际上应该注意对象的绘制是在用于显示组件的同一个
Graphics
对象上完成的。
希望对您有所帮助。