程序里有JComboBox,它们触发了ItemListener事件,可是它总是显示两遍,这是怎么为什么啊?

问题描述

packagecom.ibm.iwt.example;importjava.awt.*;importjavax.swing.*;importcom.ibm.iwt.operateFile.OperateFile;importcom.ibm.iwt.operateFile.OperateRSS;importcom.ibm.iwt.window.IWindowComponent;importcom.sun.syndication.io.FeedException;importjava.awt.event.*;importjava.io.IOException;importjava.util.Vector;classChangebusiness2implementsItemListener{JComboBoxbusiness2=newJComboBox();Stringstr=null;Changebusiness2(JComboBoxbusiness2){this.business2=business2;}publicvoiditemStateChanged(ItemEvente){//TODOAuto-generatedmethodstubif(e.getStateChange()==e.DESELECTED){JComboBoxbusiness=(JComboBox)e.getSource();if(business.getSelectedIndex()!=0){business2.removeAllItems();business2.addItem("二级行业分类");for(inti=0;i<VectorBusiness.bus2.size()/2;i++){str=(String)VectorBusiness.bus2.get(i);//System.out.println(str);if((str.split("#")[0]).equals(business.getSelectedItem())){business2.addItem(str.split("#")[1]);}}//System.out.println("nn");}}}}classChangebusiness3implementsItemListener{JComboBoxbusiness3=newJComboBox();JComboBoxbusiness=newJComboBox();Stringstr=null;Vectorvv=newVector();Changebusiness3(JComboBoxbusiness3,JComboBoxbusiness){this.business3=business3;this.business=business;}publicvoiditemStateChanged(ItemEvente){//TODOAuto-generatedmethodstubif(e.getStateChange()==e.DESELECTED){JComboBoxbusiness2=(JComboBox)e.getSource();if(business2.getSelectedIndex()!=0){business3.removeAllItems();business3.addItem("三级行业分类");for(inti=0;i<VectorBusiness.bus3.size()/2;i++){str=(String)VectorBusiness.bus3.get(i);//System.out.println(str);if((str.split("#")[0]).equals(business.getSelectedItem())&&(str.split("#")[1]).equals(business2.getSelectedItem())){business3.addItem(str.split("#")[2]);}}}}}}publicclassSetbusinessextendsJFrameimplementsActionListener{privatestaticfinallongserialVersionUID=1L;JButtonchoise=newJButton("选择");Vectorvec=newVector();JComboBoxbusiness3;JComboBoxbusiness;JComboBoxbusiness2;JTextAreabtext=newJTextArea();JButtonb_ok=newJButton("确定");JButtonb_cancel=newJButton("取消");JButtonb_rss=newJButton("添加RSS");VectorBusinessvb=newVectorBusiness();publicSetbusiness(){//this就是w设置窗体属性1this.setSize(250,420);this.setTitle("设置行业");this.setBackground(Color.BLUE);this.setResizable(false);//使不改变大小//使置于屏幕中间intwidth=(int)Toolkit.getDefaultToolkit().getScreenSize().getWidth();intheight=(int)Toolkit.getDefaultToolkit().getScreenSize().getHeight();this.setLocation((width-350)/2,(height-250)/2);//设置一大堆组件2vec.add("一级行业分类");for(inti=0;i<VectorBusiness.bus1.size()/2;i++){vec.add(VectorBusiness.bus1.get(i));}business=newJComboBox(vec);business2=newJComboBox();business2.addItem("二级行业分类");business3=newJComboBox();business2.addItem("三级行业分类");business.setPreferredSize(newDimension(100,20));business2.setPreferredSize(newDimension(100,20));business3.setPreferredSize(newDimension(100,20));choise.setPreferredSize(newDimension(100,20));btext.setBorder(BorderFactory.createLineBorder(Color.gray,1));btext.setPreferredSize(newDimension(200,150));btext.setEditable(false);//加监听事件Changebusiness2chb=newChangebusiness2(business2);Changebusiness3chb3=newChangebusiness3(business3,business);business.addItemListener(chb);business2.addItemListener(chb3);choise.addActionListener(this);b_ok.addActionListener(this);b_cancel.addActionListener(this);b_rss.addActionListener(this);//business.setSelectedIndex(-1);//business2.setSelectedIndex(-1);//business3.setSelectedIndex(-1);//布置选项面板JPanelp_box=newJPanel();p_box.setLayout(newGridLayout(3,2,5,10));p_box.add(business);p_box.add(newLabel("请选择感兴趣的行业"));p_box.add(business2);p_box.add(newLabel());p_box.add(business3);p_box.add(choise);p_box.setPreferredSize(newDimension(250,110));//布置选项面板JPanelp_boxtext=newJPanel();p_boxtext.setLayout(newBorderLayout());p_boxtext.add(p_box,BorderLayout.NORTH);p_boxtext.add(btext,BorderLayout.CENTER);p_boxtext.setPreferredSize(newDimension(250,320));//布置按钮面板JPanelp_button=newJPanel();p_button.setLayout(newFlowLayout());p_button.add(b_ok);p_button.add(b_cancel);//布置窗体this.setLayout(newBorderLayout());this.add(p_boxtext,BorderLayout.NORTH);this.add(p_button,BorderLayout.CENTER);}publicvoidactionPerformed(ActionEvente){//TODOAuto-generatedmethodstubif(e.getSource()==choise){Stringstr=(String)business3.getSelectedItem();Stringstr1=(String)business.getSelectedItem();Stringstr2=(String)business2.getSelectedItem();if(str!=null&&str!="三级行业分类"){btext.append(str1+"#"+str2+"#"+str+"n");}else{MessageDialogmd=newMessageDialog(this.getX(),this.getY()-30);md.openInformation("请选择行业分类!");md.setVisible(true);}}if(e.getSource()==b_ok){Stringstr1="未设置";Stringstr2="未设置";Stringstr3="未设置";str1=(String)business3.getSelectedItem();str2=(String)business.getSelectedItem();str3=(String)business2.getSelectedItem();String[]str=btext.getText().split("n");if(str.length>=4){OperateFile.WriteTxt(str);this.setVisible(false);IWindowComponent.setRssText(0);}else{if(str1.equals(null)||str1.equals("三级行业分类")){intx=this.getX();inty=this.getY();MessageDialogmd=newMessageDialog(x,y);md.setVisible(true);md.openInformation("请选择行业");}else{Stringstr4[]=newString[4];if(str.length<=1){for(inti=0;i<4;i++){str4[i]=str2+"#"+str3+"#"+str1;}}else{for(inti=str.length;i<4;i++){str4[i]=str2+"#"+str3+"#"+str1;}}str=str4;OperateFile.WriteTxt(str);this.setVisible(false);IWindowComponent.setRssText(0);}}}if(e.getSource()==b_cancel){Stringstr[]=newString[4];for(inti=0;i<4;i++){str[i]="未设置#未设置#未设置";}OperateFile.WriteTxt(str);Stringstr2[]=newString[10];for(inti=0;i<10;i++){str2[i]="未设置";}this.setVisible(false);JFrame.setDefaultLookAndFeelDecorated(false);ShowBusinessw=newShowBusiness(str2,str);w.setVisible(true);}if(e.getSource()==b_rss){AddRssar=newAddRss(business,business2,business3,this.getX(),this.getY());ar.setVisible(true);}}/*publicstaticvoidmain(Stringargs[]){JFrame.setDefaultLookAndFeelDecorated(true);Setbusinessw=newSetbusiness();w.setVisible(true);}*/}

解决方案

解决方案二:
显示两次什么意思??
解决方案三:
我的程序里有三个JComboBox,分别为business,business1,buisness2。每次选择business中的某一项是business1中显示相应的内容,而每次business1里显示的项都显示两遍.
解决方案四:
该回复于2010-05-16 11:23:23被版主删除
解决方案五:
而且在程序里用publicstaticvoidmain(Stringargs[]){JFrame.setDefaultLookAndFeelDecorated(true);Setbusinessw=newSetbusiness();w.setVisible(true);}不会显示两次,可是从其他类中调用这个类就显示两次。
解决方案六:
你有病啊,乱放别人的相片上去
解决方案七:
一次是旧的失去选择,一次是新的获得选择:JFramejf=newJFrame("Test");JComboBoxjcb=newJComboBox(newObject[]{1,2,3});jf.add(jcb);jcb.addItemListener(newItemListener(){@OverridepublicvoiditemStateChanged(ItemEvente){Stringtype=e.getStateChange()==ItemEvent.DESELECTED?"失去选择":"获得选择";System.out.println(e.getItem()+type);}});jf.setSize(200,200);jf.setVisible(true);jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

解决方案八:
newItemListener()换成newActionListener()就好了

时间: 2024-07-29 03:35:50

程序里有JComboBox,它们触发了ItemListener事件,可是它总是显示两遍,这是怎么为什么啊?的相关文章

VB.net 网站程序如何实现 指定时间触发事件

问题描述 开发一个web,希望能够通过文本框输入时间,此时间一到系统自动发送邮件出去.发送邮件很简单已经实现,但是不知道通过什么方法可以触发发送邮件这个事件,貌似timer控件在web里没有,有的说可以通过线程控制实现,希望大侠们能够提供代码参考哈 解决方案 解决方案二:要明确的是BS模式系统,你的网页是现实在客户端的浏览器里的,而发邮件的程序是在服务器上的.你要的这个事件必须在客户端提交,能够在客户端做这个操作的只有javascript.解决方案三:微软的ajax有time控件

为什么把 tkinter控件写进类里,就不能触发事件了?

问题描述 为什么把 tkinter控件写进类里,就不能触发事件了? from Tkinter import * class Gui: def __init__(self): self.root = Tk() self.var = IntVar() self.label = Label(self.root) self.label.pack() R1 = Radiobutton(self.root text=""Option 1"" variable=self.var

SQL Sever怎样同时插入N条数据而不在程序里控制

问:"怎样同时插入N条数据,却不在程序里控制?" 答:"由于SQL Sever不支持数组参数.所以只能用另类的办法了.利用SQL Server强大的字符串处理传把数组格式化为类似"1,2,3,4,5,6". 然后在存储过程中用SubString配合CharIndex把分割开来. 详细的存储过程: CREATE PROCEDURE dbo.ProductListUpdateSpecialList @ProductId_Array varChar(800),

在应用程序里识别UserAgent对应的浏览器

ASP.Net有很好的机制来识别用户的浏览器: 用Request.Browser就可以拿到一个 HttpBrowserCapabilities,然后用相应的属性可以取到值,比较浏览器类型,屏幕大小,JS支持等等. 对于移动设备更可以这么用,很容易拿到需要的属性(当然ASP.Net自带的浏览器库还是很不全). 但是怎样在WinApp里根据UserAgent识别浏览器呢?我通过Reflector看到主要是在 BrowserCapabilitiesFactory这个类中对浏览器的Capability进

如何安装程序不在“添加或删除程序”里显示

  有的时候在电脑上安装了一些程序,可是又不希望这些程序在"控制面板"的"添加或删除程序"列表中显示,那么该如何进行操作呢?今天,小编就跟大家介绍下解决方法. 不让程序在"添加或删除程序"里显示方法: 运行regedit命令打开"注册表编辑器",在左侧窗格中依次单击进入: "HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionUninstall",

delphi线程问题 delphi 程序里我写了一个方法

问题描述 delphi线程问题 delphi 程序里我写了一个方法 delphi 程序里我写了一个方法,方法里面的算法比较复杂,计算起来时间比较长,我想把这个方法单独放到一个线程里去执行,请问是怎么写?一点头绪没有啊,谢谢 解决方案 unit Unit1; interface uses Windows Messages SysUtils Variants Classes Graphics Controls Forms Dialogs StdCtrls; type TForm1 = class(T

我的程序里《我的歌声里》程序员版

我的程序里 没有一点点防备 也没有一丝顾虑 突然错误出现 在我的日志里带给我惊喜 身不自已可是你偏又这样 在我不知不觉中悄悄的 消失 从我的堆栈里没有音讯 剩下了报警短信 你 存在我某一个模块里 我的梦里,我的心里,我的程序里 你 存在我深哪一个模块里 我的梦里 我的心里 我的程序里 还记得我们曾经肩并肩一起排查 某个线上问题尽管一开始下起来没法下手 但我们没有放弃自己的借口 一个断点 一个结构 一行一行注释的背后 好像是一场战斗 不能回头 你存在我某一行代码里 我的梦里 我的心里 我的程序里

c++-各位大虾, 我想在程序里监视系统上运行的某些程序运行过程中是否报错异常,能实现吗? 怎么实现?

问题描述 各位大虾, 我想在程序里监视系统上运行的某些程序运行过程中是否报错异常,能实现吗? 怎么实现? 对于程序运行过程中卡死已经能检测,但是对于一些弹框类的运行出错却不知道怎么检测,请各位大虾指点迷津; 现在没有C币,如果回答是我想要的,我花钱补上 解决方案 这不就是编写一个华医生么(注:华医生是微软系统上负责处理应用程序崩溃的程序,就是你图上的"xxx已停止工作,Windows正在联机查找解决方案"),这是一个应用程序,是在用户模式下实现的,而并非在内核中实现,其实华医生也可以卸

数据库中保存\t ,程序里取出后变为 \\t 怎么解决

问题描述 数据库中保存着需要进行分隔的值split值为"t"如下图在程序里取到这个split的值后,进行分隔,发现变成"\t"了,致使使用string[]str=text.Split(newstring[]{strsplit},StringSplitOptions.RemoveEmptyEntries);对text的值进行分隔时出现错误,分析不出来.手动将strsplit替换为"t"就可以.有什么办法解决 解决方案 解决方案二:这样就可以分隔解决