Swing "Timer" Event 发送两次?

问题描述

问题:写了个example学习Swing:每次TimerEvent(oncepersec)发生时选择下一个RadioButton。但总是选择下下一个。平台:MacOSX,JDK1.6,Eclipse3.6调试:经过调试,发现每秒fire两个TimerEvent。代码:Timer相关内容用粗体字标识packagecomponents;importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;importjavax.swing.Timer;publicclassRadioButtonDemoextendsJPanelimplementsActionListener{privatestaticfinallongserialVersionUID=1L;staticStringbirdString="Bird";staticStringcatString="Cat";staticStringdogString="Dog";staticStringrabbitString="Rabbit";staticStringpigString="Pig";JButtonautoButton;JRadioButtonbirdButton,catButton,dogButton,rabbitButton,pigButton;Timertimer=newTimer(1000,this);publicRadioButtonDemo(){super(newBorderLayout());//CreatetheAUTObutton.autoButton=newJButton("auto");autoButton.setActionCommand("auto");//Createtheradiobuttons.birdButton=newJRadioButton(birdString);birdButton.setMnemonic(KeyEvent.VK_B);birdButton.setActionCommand(birdString);birdButton.setSelected(true);catButton=newJRadioButton(catString);catButton.setMnemonic(KeyEvent.VK_C);catButton.setActionCommand(catString);dogButton=newJRadioButton(dogString);dogButton.setMnemonic(KeyEvent.VK_D);dogButton.setActionCommand(dogString);rabbitButton=newJRadioButton(rabbitString);rabbitButton.setMnemonic(KeyEvent.VK_R);rabbitButton.setActionCommand(rabbitString);pigButton=newJRadioButton(pigString);pigButton.setMnemonic(KeyEvent.VK_P);pigButton.setActionCommand(pigString);//Grouptheradiobuttons.ButtonGroupgroup=newButtonGroup();group.add(birdButton);group.add(catButton);group.add(dogButton);group.add(rabbitButton);group.add(pigButton);//Registeralistenerfortheradiobuttons.birdButton.addActionListener(this);catButton.addActionListener(this);dogButton.addActionListener(this);rabbitButton.addActionListener(this);pigButton.addActionListener(this);autoButton.addActionListener(this);//Puttheradiobuttonsinacolumninapanel.JPanelradioPanel=newJPanel(newGridLayout(0,1));radioPanel.add(birdButton);radioPanel.add(catButton);radioPanel.add(dogButton);radioPanel.add(rabbitButton);radioPanel.add(pigButton);add(radioPanel,BorderLayout.LINE_START);add(autoButton,BorderLayout.CENTER);setBorder(BorderFactory.createEmptyBorder(20,20,20,20));}/**Listenstotheradiobuttons.*/publicvoidactionPerformed(ActionEvente){if("timer".equals(e.getActionCommand())){if(birdButton.isSelected()){catButton.setSelected(true);}elseif(catButton.isSelected()){dogButton.setSelected(true);}elseif(dogButton.isSelected()){rabbitButton.setSelected(true);}elseif(rabbitButton.isSelected()){pigButton.setSelected(true);}elseif(pigButton.isSelected()){birdButton.setSelected(true);}}elseif("auto".equals(e.getActionCommand())){timer.addActionListener(this);timer.setActionCommand("timer");timer.setInitialDelay(1000);timer.start();}}/***CreatetheGUIandshowit.Forthreadsafety,*thismethodshouldbeinvokedfromthe*event-dispatchingthread.*/privatestaticvoidcreateAndShowGUI(){//Createandsetupthewindow.JFrameframe=newJFrame("RadioButtonDemo");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//Createandsetupthecontentpane.JComponentnewContentPane=newRadioButtonDemo();newContentPane.setOpaque(true);//contentpanesmustbeopaqueframe.setContentPane(newContentPane);//Displaythewindow.frame.pack();frame.setVisible(true);}publicstaticvoidmain(String[]args){//Scheduleajobfortheevent-dispatchingthread://creatingandshowingthisapplication'sGUI.javax.swing.SwingUtilities.invokeLater(newRunnable(){publicvoidrun(){createAndShowGUI();}});}}请给个思路fix这个问题。谢谢您的时间

解决方案

解决方案二:
大过年的,还在弄技术,可喜~
解决方案三:
忘记用Codetag了,抱歉

packagecomponents;importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;importjavax.swing.Timer;publicclassRadioButtonDemoextendsJPanelimplementsActionListener{privatestaticfinallongserialVersionUID=1L;staticStringbirdString="Bird";staticStringcatString="Cat";staticStringdogString="Dog";staticStringrabbitString="Rabbit";staticStringpigString="Pig";JButtonautoButton;JRadioButtonbirdButton,catButton,dogButton,rabbitButton,pigButton;Timertimer=newTimer(1000,this);publicRadioButtonDemo(){super(newBorderLayout());//CreatetheAUTObutton.autoButton=newJButton("auto");autoButton.setActionCommand("auto");//Createtheradiobuttons.birdButton=newJRadioButton(birdString);birdButton.setMnemonic(KeyEvent.VK_B);birdButton.setActionCommand(birdString);birdButton.setSelected(true);catButton=newJRadioButton(catString);catButton.setMnemonic(KeyEvent.VK_C);catButton.setActionCommand(catString);dogButton=newJRadioButton(dogString);dogButton.setMnemonic(KeyEvent.VK_D);dogButton.setActionCommand(dogString);rabbitButton=newJRadioButton(rabbitString);rabbitButton.setMnemonic(KeyEvent.VK_R);rabbitButton.setActionCommand(rabbitString);pigButton=newJRadioButton(pigString);pigButton.setMnemonic(KeyEvent.VK_P);pigButton.setActionCommand(pigString);//Grouptheradiobuttons.ButtonGroupgroup=newButtonGroup();group.add(birdButton);group.add(catButton);group.add(dogButton);group.add(rabbitButton);group.add(pigButton);//Registeralistenerfortheradiobuttons.birdButton.addActionListener(this);catButton.addActionListener(this);dogButton.addActionListener(this);rabbitButton.addActionListener(this);pigButton.addActionListener(this);autoButton.addActionListener(this);//Puttheradiobuttonsinacolumninapanel.JPanelradioPanel=newJPanel(newGridLayout(0,1));radioPanel.add(birdButton);radioPanel.add(catButton);radioPanel.add(dogButton);radioPanel.add(rabbitButton);radioPanel.add(pigButton);add(radioPanel,BorderLayout.LINE_START);add(autoButton,BorderLayout.CENTER);setBorder(BorderFactory.createEmptyBorder(20,20,20,20));}/**Listenstotheradiobuttons.*/publicvoidactionPerformed(ActionEvente){if("timer".equals(e.getActionCommand())){if(birdButton.isSelected()){catButton.setSelected(true);}elseif(catButton.isSelected()){dogButton.setSelected(true);}elseif(dogButton.isSelected()){rabbitButton.setSelected(true);}elseif(rabbitButton.isSelected()){pigButton.setSelected(true);}elseif(pigButton.isSelected()){birdButton.setSelected(true);}}elseif("auto".equals(e.getActionCommand())){timer.addActionListener(this);timer.setActionCommand("timer");timer.setInitialDelay(1000);timer.start();}}/***CreatetheGUIandshowit.Forthreadsafety,*thismethodshouldbeinvokedfromthe*event-dispatchingthread.*/privatestaticvoidcreateAndShowGUI(){//Createandsetupthewindow.JFrameframe=newJFrame("RadioButtonDemo");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//Createandsetupthecontentpane.JComponentnewContentPane=newRadioButtonDemo();newContentPane.setOpaque(true);//contentpanesmustbeopaqueframe.setContentPane(newContentPane);//Displaythewindow.frame.pack();frame.setVisible(true);}publicstaticvoidmain(String[]args){//Scheduleajobfortheevent-dispatchingthread://creatingandshowingthisapplication'sGUI.javax.swing.SwingUtilities.invokeLater(newRunnable(){publicvoidrun(){createAndShowGUI();}});}}
解决方案四:
elseif("auto".equals(e.getActionCommand())){//timer.addActionListener(this);将这行去掉再试试。timer.setActionCommand("timer");timer.setInitialDelay(0);timer.start();}

时间: 2024-07-31 01:48:30

Swing "Timer" Event 发送两次?的相关文章

jsp truts-<div class="error_mes">${message}</div>

问题描述 <div class="error_mes">${message}</div> ${message}什么意思?${message}通常在哪实现? 解决方案 ${message}是java中el表达式 可以获取域中的值 四大作用域 application request session pageContext 建议百度看下el表达式就ok了 解决方案二: jsp中的EL表达式,具体看下这里面.http://blog.csdn.net/chinacshar

ajax-兄弟伙我的OnSuccess=&amp;amp;quot;afterLogin&amp;amp;quot;咋调用不起

问题描述 兄弟伙我的OnSuccess="afterLogin"咋调用不起 兄弟伙我的OnSuccess="afterLogin"咋调用不起,直接返回return Content类容到页面 @{ Layout = null; } <!DOCTYPE html> 网上超市管理系统 </p> <pre><code> //就是执行controller方法以后执行的方法 function afterLogin(data) {

safari-MacBook的Safari下type=&amp;amp;quot;submit&amp;amp;quot;点击后显示不出div

问题描述 MacBook的Safari下type="submit"点击后显示不出div 如题,按钮点击的时候在window浏览器这个红色背景的div会一闪而过,但是在macbook的Safari中什么效果都没有,return false的时候div可以显示出来,但表单还怎么提交啊,return true时页面中div已经加载变成block了,感觉是还没来得及被浏览器渲染页面就刷新了一下,有没有什么办法可以让它有一闪而过的效果? html: <div id="divTes

jquery mobile中使用data-role=&amp;amp;quot;dialog&amp;amp;quot;弹出对话框的问题

问题描述 jquery mobile中使用data-role="dialog"弹出对话框的问题 如图,当页面除了一个"page"和"dialog"还有其它的 容器时,对话框后的背景就会显示没有样式的这个容器内容, 这是为什么呢,怎样才能让背景中不显示任何东西 解决方案 试试把背景内容放到另一个page中 你说的data-role =dialog 我没注意到 这个属性... 另外 可以看看 . data-role=popup http://www.

java web-&amp;amp;lt;c:forEach items=&amp;amp;quot;${salesProducts }&amp;amp;quot; var=&amp;amp;quot;pro&amp;amp;quot;&amp;amp;gt;

问题描述 <c:forEach items="${salesProducts }" var="pro"> ${pro.goodsName}特价:¥${pro}/c:forEach pro的bean类属性都设了getter和setter方法,但是${pro.goodsName}没值,${pro}却有值 解决方案 检查一下goodsName属性名称有没写错. 解决方案二: private String goodsName;public String getG

RemoteObject在同一页面发送两次后台请求返回值处理

问题描述 项目是用的flex3+Spring3+hibernate3.6+blazeds,全用注解写的,在同一页面发送两次后台请求,总是报[RPC Fault faultString="java.lang.StackOverflowError : null" faultCode="Server.Processing" faultDetail="null"]错误,代码如下:<?xml version="1.0" encod

tomcat-单一HTML页面,采用dhtmlx前台组件,同时发送两个ajax请求,导致报错或者结果混乱,求解

问题描述 单一HTML页面,采用dhtmlx前台组件,同时发送两个ajax请求,导致报错或者结果混乱,求解 环境:tomcat+eclipse+dhtmlx+dhtmlxconnector 需求:一个页面4个grid,同时发送请求返回数据 现象:1.有时报错Cannot call reset() after response has been committed 2.有时结果换乱,Agrid的结果在Bgrid里 求详细分析和详细解决方法. 解决方案 原来也遇到类似问题,后来解决办法就是给每一个g

jQuery Easyui datagrid连续发送两次请求问题_jquery

XXXXXX.datagrid({ url: "${pageContext.request.contextPath}/xx/xx/xx, }); 用上述方式动态加载datagrid的数据时,通过net监听,发现调用了两遍XX方法,目前的解决方案是,将url放到datagrid初始化的时候执行. $('#XXXX').datagrid({ fit: true, fitColumns: false, border: false, pagination: false, idField: 'id', s

发送-微信高级群发(根据分组群发)报errcode&amp;amp;quot;:40008,&amp;amp;quot;

问题描述 微信高级群发(根据分组群发)报errcode":40008," 根据官方文档发送图文消息:{"filter":{"is_to_all":false "group_id":"0"},"mptext":{"content":">>123>>"},"msgtype":"text"}