设置位置,我写我的代码像下面和标签正确地移动:布局管理器取消的jlable
panel.setLayout(null);
JLabel label1=new JLabel("LABEL");
JLabel label2=new JLabel("0");
JButton btn1=new JButton("start");
btn1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e)
{
Thread t=new Thread()
{
public void run()
{
while(true)
{
try
{
Thread.sleep(10);
}
catch (Exception ex)
{}
label2.setText(String.valueOf(Integer.parseInt(label2.getText())+1));
label1.setLocation(label1.getX()+1, label1.getY());
}
}
};
t.start();
}
});
,但是当我在Netbeans的JFrame中写不动了! 是否有可能是JFrame布局管理器的问题? 我该如何解决它?
在同样的问题,当我评论下面的代码行A更改jLabel2的位置正常工作,但是当行A和B都不评论时jLabel2永远不会移动!
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
Thread t=new Thread()
{ public void run()
{ while(true)
{ try
{ Thread.sleep(10); }
catch (Exception ex) {}
/* line A */
jLabel1.setText(String.valueOf(Integer.parseInt(jLabel1.getText())+1));
/* line B */
jLabel2.setLocation(jLabel2.getX()+1, jLabel2.getY());
}
}
};
t.start();
}
不要尝试和更新EDT之外的UI组件。请参阅[与Swing并发](http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html) – 2014-10-16 14:04:24
_“是否有可能是JFrame布局管理器的问题?”_ - YES。使用布局管理器时,位置不适用。但你应该使用布局管理器。请参阅[在容器中放置组件](http://docs.oracle.com/javase/tutorial/uiswing/layout/index.html) – 2014-10-16 14:05:48
您正在尝试执行某种类型的动画,如果是这样,那么我假设可以在包含JLabel的JPanel上使用空布局,但是您必须专门设置具有此布局的JPanel。它不会自动来。另外,是的,您的Swing调用必须在Swing事件线程上完成。一个简单的方法是使用Swing Timer而不是直接使用后台线程。 – 2014-10-16 15:43:59