是否可以从另一个对象的循环中重新绘制JPanel?我有一个由JPanel(DrawPanel)和SA对象组成的JFrame。我想在此SA对象的while循环期间更新/重新绘制JPanel。我开始了一个新线程,但仍然没有执行panel.repaint()。
public class Mainform extends JFrame {
private DrawPanel DrawPanel;
public static void main(String[] args) {
DrawPanel panel = new DrawPanel();
SA sa = new SA(panel);
Thread t = new Thread(sa);
t.start();
//...
}
}
public class DrawPanel extends JPanel implements MouseMotionListener, MouseListener {
public DrawPanel() {
super();
setBackground(Color.WHITE);
addMouseWheelListener(this);
addMouseListener(this);
addMouseMotionListener(this);
}
//...
}
public class SA implements Runnable {
private DrawPanel panel;
public SA(DrawPanel p) {
this.panel = p;
init();
}
public void run() {
while (true) {
//...
panel.repaint();
}
}
}
编辑:运行是公开的
答案 0 :(得分:2)
基本答案是“是”。
这假设您尝试重新绘制的组件是
RepaintManager
通常很聪明,知道不要浪费时间画一些不可显示的东西。
以下示例相当基本,但每次调用时都会在paintComponent
JPanel
内增加一个计数器。附加到Runnable
的{{1}}将每秒更新一次......
Thread