Java 为什么paintComponent()会被多次调用?
我正试图编写一个实现observer接口的类,这个类根据textField的输入垂直绘制矩形。除了我的矩形不是从坐标(0,0)开始外,所有的东西都正常运行。我试着放一个System.out.print,看看发生了什么,我的paintComponent()似乎被调用了两次。我不知道到底哪里出了问题。谁能帮我解决这个问题?下面是我的代码:Java 为什么paintComponent()会被多次调用?,java,swing,graphics,Java,Swing,Graphics,我正试图编写一个实现observer接口的类,这个类根据textField的输入垂直绘制矩形。除了我的矩形不是从坐标(0,0)开始外,所有的东西都正常运行。我试着放一个System.out.print,看看发生了什么,我的paintComponent()似乎被调用了两次。我不知道到底哪里出了问题。谁能帮我解决这个问题?下面是我的代码: public void paintComponent(Graphics g) { super.paintComponent(g);
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
for (int i = 0; i < dm.getData().size(); i++)
{
Rectangle2D rectangle = new Rectangle2D.Double(x, y, dm.getDataElement(i), height);
g2.draw(rectangle);
System.out.println(i + "th rec drew.");
y = y + height;
}
}
public void update(Observable o, Object arg) {
// TODO Auto-generated method stub
repaint();
}
公共组件(图形g)
{
超级组件(g);
图形2d g2=(图形2d)g;
对于(int i=0;i
Swing GUI绘制永远不在您的直接控制之下。绘制可能是因为您的程序通过调用repaint()
请求完成,即使这样也不能保证会导致绘制,或者是因为操作系统认为窗口需要重新绘制并指示它这样做。正是出于这个原因,您应该避免放入程序逻辑、状态更改代码,例如y=y+height代码>,在绘制方法中。把它放在别处,比如说在你的update(…)
方法或Swing定时器中,然后让绘画方法只负责绘制程序状态的可视表示,而不是更改它
有关这方面的更多详细信息,请阅读谢谢您的回答。我试着在变量y相加时将其放入update()中。但是,在我更改矩形后,它并没有垂直堆叠。@X_C95:然后您遇到了另一个问题,代码中有一个bug,但与您的主要问题无关,这个问题已经得到了回答