尝试使用Swing中的paint方法绘制一些元素时遇到问题。 正如标题所说,我的整个框架崩溃并做了一些奇怪的重复。
我制作了一个单独的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;
}
}
以下是包含此代码的框架:
这里没有重绘方法:
不,我知道重绘方法对于动态添加形状和实际绘制是必不可少的,但我无法使其正常工作。
另外,正如您从上面的代码中看到的那样,面板背景设置为白色,但我的框架无法渲染它。
希望有足够的信息来解决我的问题,如果没有,我会添加我的JFrame代码!
谢谢!
答案 0 :(得分:1)
你永远不应该覆盖paint
方法,因为它处理幕后的许多其他事情。您应该改为覆盖paintComponent
。
答案 1 :(得分:1)
当@ Joe C回答时,我应该一直使用paintComponent方法,而不是绘画!工作代码:
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.PINK);
this.setVisible(true);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
for (Oblik obl : this.listaOblika) {
obl.crtajUBoji(g);
}
repaint();
}
public ArrayList<Oblik> getListaOblika() {
return this.listaOblika;
}
}