重绘功能弄乱了整个框架
Repaint function messes up the whole frame
尝试在 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 的代码!
谢谢!
您永远不应覆盖 paint
方法,因为它在幕后处理许多其他事情。您应该改写 paintComponent
。
正如@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;
}
}
尝试在 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 的代码!
谢谢!
您永远不应覆盖 paint
方法,因为它在幕后处理许多其他事情。您应该改写 paintComponent
。
正如@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;
}
}