【发布时间】:2018-01-14 10:34:30
【问题描述】:
尝试在 Swing 中使用绘制方法绘制一些元素时遇到问题。 正如标题所说,我的整个框架崩溃并做了一些奇怪的重复。
我制作了一个单独的 JPanel,以便我可以操纵绘制的形状:
public class PanelPovrsina extends JPanel{
private ArrayList<Oblik> listaOblika;
public PanelPovrsina() {
// svi oblici
this.listaOblika = new ArrayList<Oblik>();
this.listaOblika.add(new Kvadrat(new Tacka(50, 50), 50, "zuta", "crvena"));
this.setBackground(Color.WHITE);
this.setVisible(true);
}
public void paint(Graphics g) {
if(this.listaOblika.isEmpty()) return;
Iterator<Oblik> it = this.listaOblika.iterator();
while(it.hasNext()) {
it.next().crtajUBoji(g);
}
repaint(); // this causes problems!
}
public ArrayList<Oblik> getListaOblika() {
return this.listaOblika;
}
}
这是带有此代码的框架:
这里没有重绘方法:
不,我知道 repaint 方法对于动态添加形状和实际绘制是必不可少的,但我无法使其正常工作。
另外,从上面的代码可以看出,面板的背景设置为白色,但我的框架不会渲染它。
希望有足够的信息来解决我的问题,如果没有,我会添加我的 JFrame 的代码!
谢谢!
【问题讨论】:
-
首先,您永远不应该覆盖
paint方法。您应该改写paintComponent。其次,正如您所发现的,永远不应该在paint方法(或它调用的任何方法)中调用repaint()。 -
谢谢,使用
paintComponent解决了我的问题!
标签: java swing jframe jpanel paint