如何每秒移动jlabel?
我尝试每秒向右移动(x ++)
我尝试用线程移动它..
- 怎么做? (并且可以看到它每秒移动)
- 有没有使用线程的另一种方法吗?
- 我应该使用什么版面管理器?
继续我尝试..
public class help { JFrame frame = new JFrame(); JLabel label = new JLabel("target"); public help() { frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); frame.setSize(800,600); frame.setLayout(new GridLayout()); frame.add(label); label.setPreferredSize(new Dimension(100,100)); label.setLocation(400, 300); frame.getContentPane().validate(); frame.repaint(); frame.setVisible(true); mysterious(); } void mysterious(){ //////////////////////////////// // part of edit responding David kroukamp Thread t = new Thread(new Runnable() { @Override public void run() { try{ for (int z=0; z<10; z++){ label.setLocation((label.getLocationOnScreen().x+10), label.getLocationOnScreen().y); Thread.sleep(1000); } }catch(Exception ae){ } } }); t.start(); ////////////////////////////// } public static void main(String[]args){ new help(); } }
非常感谢任何帮助
- 类名以大写字母开头,即
Help
- 应在
Event Dispatch Thread
上创建和修改Swing组件 -
像这样创建一个新的
Thread
:Thread t = new Thread(new Runnable() { @Override public void run() { //work here } }); t.start();//start thread
但是我建议使用Swing Timer
因为它在EDT
运行:
- 如何使用Swing Timers
编辑:
根据您的问题,我建议使用Timer
,创建线程点是为了一般知识。
问题是线程不在您的swing GUI的EDT线程上运行,其中Timer
作为:
int delay = 1000; //milliseconds ActionListener taskPerformer = new ActionListener() { int count=0; public void actionPerformed(ActionEvent evt) { if(count==10) {//we did the task 10 times ((Timer)evt.getSource()).stop(); } label.setLocation((label.getLocationOnScreen().x+10), label.getLocationOnScreen().y); System.out.println(SwingUtilities.isEventDispatchThread()); count++; } }; new Timer(delay, taskPerformer).start();
参考:
这是一个简单的益智游戏的Swing
示例。
Java Swing Shuffle游戏
当您按下“ Pause
按钮时,标题将获得动画,直到您释放暂停。 同样,您可以将它用于JLabel
。 源代码也附上。
希望对你有所帮助。
如果将构造函数的那部分放在一个线程中,那么你可以调用thread.sleep(1000);
(1秒延迟1000毫秒)然后刷新,这应该在屏幕上移动目标。
- 在连接三元运算符的2个结果时,字符串连接在Java中无法正常工作
- 比较版本号字符串(主要,次要,修订版,测试版)
- Spring security oauth2 – 无法访问/ oauth / token路由
- IntelliJ错误 – 在-source 1.6错误中不支持java:try-with-resources。 即使在项目设置中,也选择了1.7 JDK
- 使用FileInputStream / ObjectOutputStream发送大文件
- 如何捕获RESTEasy Beanvalidation错误?
- 翻转旋转和图像
- 接受List作为Jersey Web服务的参数,该Web服务使用多部分的内容类型
- 从Linux上的NetBeans(Mageia)中的Java应用程序连接到MariaDB