java-JFrame(摆动)使用按钮切换重复动作
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-JFrame(摆动)使用按钮切换重复动作,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3389字,纯文字阅读大概需要5分钟。
内容图文
![java-JFrame(摆动)使用按钮切换重复动作](/upload/InfoBanner/zyjiaocheng/692/eb8ea2f436e54a79a887e80a50c7f72a.jpg)
我想要一个带有2个按钮(最终还有更多个按钮)的JFrame应用程序,我可以使用它们在多个重复动作之间进行切换,为简便起见,我现在仅使用控制台打印,尽管稍后可能会调用一个方法.这是JFrame的框架:
public class DayNight extends JFrame implements ActionListener{
//JFrame entities
private JPanel animationPanel;
private JButton button;
private JButton button2;
public static void main(String[] args) {
DayNight frame = new DayNight();
frame.setSize(2000, 1300);
frame.setLocation(1000,350);
frame.createGUI();
frame.setVisible(true);
frame.setTitle("Day/Night Cycle, Rogier");
}
private void createGUI() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
Container window = getContentPane();
window.setLayout(new FlowLayout() );
animationPanel = new JPanel();
animationPanel.setPreferredSize(new Dimension(2000, 900));
animationPanel.setBackground(Color.black);
window.add(animationPanel);
button = new JButton("choice1");
button.setFont(new Font("Arial", Font.PLAIN, 50));
window.add(button);
button.setActionCommand("choice1");
button.addActionListener(this);
button2 = new JButton("choice2");
button2.setFont(new Font("Arial", Font.PLAIN, 50));
window.add(button2);
button2.setActionCommand("choice2");
button2.addActionListener(this);
}
}
我尝试了以下方法:
public void actionPerformed(ActionEvent event) {
String command = event.getActionCommand();
while ("Stop"!=(command)){
command = event.getActionCommand();
try{
Thread.sleep(500);
if ("choice1".equals(command)){
System.out.println("choice1");
}
else if("choice2".equals(command)){
System.out.println("choice2");
}
else{
System.out.println("no choice");
}
}
catch(InterruptedException ex){
Thread.currentThread().interrupt();
}
}
}
但是当我单击一个按钮后,它一直停留在该打印件上,甚至无法再与这些按钮进行交互.我是否缺少某些东西,还是需要一个完全不同的结构?我已经检查了许多不同的程序,但是它们太复杂了,以至于我无法理解,阅读Swing中的并发并没有为我解决.
编辑:还没有“停止”命令,因为我现在不需要它.
解决方法:
您的代码有很多错误.
它以错误的字符串比较开始(请参见here).
但是您的实际问题是:您正在使事件调度程序线程处于休眠状态(请参阅there)
因此,您与事件监听器一起睡觉的想法是错误的方法.你不能这样子.您必须重新考虑您的方法.
真正的答案是:您缺乏Java的基本知识.考虑使用Swing UI编码之前,请先学习此类基本知识,然后再进一步负担过多.
您的要求似乎是:按下该按钮后-经过一定时间后,您想在控制台上打印一些内容.您可以这样做:
public void actionPerformed(ActionEvent event) {
String command = event.getActionCommand();
command = event.getActionCommand();
Runnable printChoice = new Runnable() {
@Override
public void run() {
try{
Thread.sleep(500);
if ("choice1".equals(command)){
System.out.println("choice1");
}
else if("choice2".equals(command)){
System.out.println("choice2");
}
else{
System.out.println("no choice");
}
}
catch(InterruptedException ex){
Thread.currentThread().interrupt();
}
});
new Thread(printChoice).start();
}
以上:
>创建一个Runnable,它只是等待然后打印一些东西
>使用新的线程(不是事件分配器线程)来执行此操作
我没有通过编译器运行此程序-它的意思是“伪代码”,以给您一些解决问题的想法.
但是,请进一步考虑-我认为这是朝错误的方向进行.您不希望在开发合理的UI应用程序时等待任何事情.
换句话说:您想到了:
>单击按钮A-一些代码开始“循环”
>当用户做出另一选择时,该“循环”代码会注意到并执行某些操作
错误的方法.而是按照以下方式工作:
>用户单击一个按钮,也许可以启用其他UI组件
>用户对其他UI组件进行操作-触发其他操作
示例:更改单选按钮会触发事件.您不应有一个定期检查这些按钮的循环.取而代之的是,您定义了用户必须遵循的明确的操作/事件流,才能触发特定操作.
内容总结
以上是互联网集市为您收集整理的java-JFrame(摆动)使用按钮切换重复动作全部内容,希望文章能够帮你解决java-JFrame(摆动)使用按钮切换重复动作所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。