我使用paintComponent()
方法绘制了一些数字:
public void paintComponent(Graphics g){
super.paintComponent(g);
g.setColor(Color.BLUE);
g.drawRect(50, 50, 50, 50);
g.drawOval(60, 60, 60, 60);
//repaint();
//g.drawOval(10, 10, 10, 10); - nothing effect
}
但是现在我想要删除所有这些数字并绘制一些新的数字。我不知道我该怎么做?也许我必须使用repaint()
方法,但使用它错了?
答案 0 :(得分:2)
Java会在paintComponent()
中绘制您描述的所有数字,但只有此方法返回时。因此,您无法绘制,然后在此方法中隐藏一些数字以进行相同的方法调用。这个方法需要第一次用一组数字来表示,然后用另一组数字来表示。
可能是这样的:
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.BLUE);
if (drawFiguresX) {
g.drawRect(50, 50, 50, 50);
g.drawOval(60, 60, 60, 60);
} else {
g.drawOval(10, 10, 10, 10);
}
}
答案 1 :(得分:2)
每次调用该方法时,无论您在paintComponent
方法中编写什么内容都会被绘制。基于到目前为止的描述,实现您想要实现的目标的通常方法是确定是否应该绘制某些东西:
class TheClass extends JComponent
{
private boolean paintTheFirstThing = true;
@Override
protected void paintComponent(Graphics g){
super.paintComponent(g);
if (paintTheFirstThing)
{
g.setColor(Color.BLUE);
g.drawRect(50, 50, 50, 50);
g.drawOval(60, 60, 60, 60);
}
else
{
g.drawOval(10, 10, 10, 10)
}
}
void setPaintTheFirstThing(boolean p)
{
this.paintTheFirstThing = p;
repaint();
}
}
(这只是一个草图,显示了基本的想法。当然,当你想绘制许多不同的东西时,你不会为它们创建许多布尔标志。关键点是在您的paintComponent
方法中,您必须描述在某个时间点应该绘制的)