1
我傾向於移動我的底層JFrame
s相當笨拙,通過使用創建一個靜態引用然後鼠標事件來更新Point
的位置。移動未修飾的JFrame使用鼠標事件和線程更新
所以在試圖更好地理解主題,我想圍繞一個非常簡單的底塗JFrame
移動如下:
- 創建
JFrame
- 添加
MouseListener
- onMousePressed:
Point p = Mousevent.getPoint();
- onMouseReleased:
Point p = Mousevent.getPoint();
,同時有一個線程不斷更新JFrame
的位置。
但我無法弄清楚爲什麼controllerThread,不會做一個以上的迭代?還有一個解釋,爲什麼下面的代碼是可怕的將非常感激。
public AnimationStation() throws HeadlessException {
P=this.getLocation();
run();
class ControllerThread extends Thread{
JFrame j;
public ControllerThread(JFrame j){
this.j = j;
}
@Override
public void run(){
this.j.setLocation(P);
}
}
ControllerThread ct = new ControllerThread(this);
ct.run();
//ct.start();
}
@Override
public void run() {
this.setSize(d);
Container cp = this.getContentPane();
P=this.getLocation();
this.setUndecorated(true);
this.setVisible(true);
this.setAlwaysOnTop(true);
this.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent me) {
P = me.getPoint();
}
@Override
public void mousePressed(MouseEvent me) {
P = me.getPoint();
}
@Override
public void mouseReleased(MouseEvent me) {
P = me.getPoint();
}
@Override
public void mouseEntered(MouseEvent me) {
}
@Override
public void mouseExited(MouseEvent me) {
}
});
}
好吧,工作很順利很多謝謝你。儘管我試圖理解線程。這顯然是移動/拖動JFrame更好的方法。似乎我的運行方法只是缺少一個while循環? –
@Fionán:不,你的'while'循環的概念隱含在Swing'EventQueue'中。 – trashgod
@trashgod我假設從線程的一個隱含的時間在ct線程的run()上延伸,但是沒有改變給定的原始代碼與.start()或.run()..沒有添加while()因此是原始問題。 –