请教一个Java的Swing技术问题.

问题描述

高手,我弄了一个Java的Swin类型,源代码如下:importjava.awt.Component;importjava.awt.Rectangle;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.ItemEvent;importjava.awt.event.ItemListener;importjava.io.File;importjava.net.URL;importjava.util.Enumeration;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importjavax.swing.Icon;importjavax.swing.ImageIcon;importjavax.swing.JButton;importjavax.swing.JComponent;importjavax.swing.JFrame;importjavax.swing.JPanel;importjavax.swing.JScrollPane;importjavax.swing.JTable;importjavax.swing.Timer;importjavax.swing.UIManager;importjavax.swing.table.DefaultTableCellRenderer;importjavax.swing.table.DefaultTableModel;importjavax.swing.table.JTableHeader;importjavax.swing.table.TableColumn;publicclassTableCellRenderer8extendsJPanelimplementsItemListener,ActionListener{publicTableCellRenderer8(){jb.addActionListener(this);}StringBufferchoice;JButtonjb=newJButton();JFramejf=newJFrame("使用单元格绘制器");JTabletable;//定义二维数组作为表格数据Object[][]tableData={};publicstaticHashMap<String,Object[]>tableList=newHashMap<String,Object[]>(){/****/privatestaticfinallongserialVersionUID=1L;{for(inti=0;i<100;i++){put(String.valueOf(i),newObject[]{"王二小"+i,29,newImageIcon("icon/male.png"),newImageIcon("icon/3.gif"),true});}}};publicvoidaddData2table(Stringusername,Stringplace,Integersex,booleanisFull){ImageIconsexicon=newImageIcon("icon/male.png");if(sex==0){//女sexicon=newImageIcon("icon/female.png");}Object[]row=newObject[]{username,place,sexicon,newTimeLabel(),isFull};//tableList.put(DRecv.BJMemUID[myuserIndex],list);((DefaultTableModel)table.getModel()).insertRow(0,row);//加入空行this.FitTableColumns(this.table);}publicvoidremovedata2table(List<Object[]>list){inti=0;//for(intj=0;j<tableList.size();i++){//if(tableList.get(i).////}publicObject[][]toArray(Map<String,Object[]>map){Object[][]objs=null;if(map==null||map.isEmpty()){returnobjs;}Object[]o=map.keySet().toArray();objs=newObject[o.length][];for(inti=0;i<o.length;i++){objs[i]=map.get(o[i]);}returnobjs;}//publicvoidaddData2table(Object[][]str){//tableData[][tableData.length]=str[][tableData.length];//}////定义一维数据作为列标题String[]columnTitle0={"员工姓名","员工毕业院校","员工性别","员工本单维护时间","订单状态"};publicvoidinit(){//以二维数组和一维数组来创建一个ExtendedTableModel对象ExtendedTableModel8model=newExtendedTableModel8(columnTitle0,null);//以ExtendedTableModel来创建JTabletable=newJTable(model);table.setRowSelectionAllowed(false);table.setRowHeight(40);//获取第三列//table.setDefaultRenderer(Object.class,new//GenderTableCellRenderer());//table.getColumnModel().getColumn(4)//.setCellEditor(newDefaultCellEditor(newJCheckBox()));table.getColumnModel().getColumn(2).setCellRenderer(newGenderTableCellRenderer8());table.getColumnModel().getColumn(3).setCellRenderer(newGenderTableCellRenderer8());//将JTable对象放在JScrollPane中,并将该JScrollPane放在窗口中显示出来jf.add(newJScrollPane(table));FitTableColumns(table);jf.setBounds(newRectangle(100,100,800,600));//jf.pack();jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);jf.setVisible(true);Timertimer=newTimer(100,newActionListener(){publicvoidactionPerformed(ActionEvente){table.updateUI();}});timer.start();}publicvoidFitTableColumns(JTablemyTable){JTableHeaderheader=myTable.getTableHeader();introwCount=myTable.getRowCount();Enumerationcolumns=myTable.getColumnModel().getColumns();while(columns.hasMoreElements()){TableColumncolumn=(TableColumn)columns.nextElement();intcol=header.getColumnModel().getColumnIndex(column.getIdentifier());//取得表头宽度,然后和内容宽度进行逐一比较,取最大者,如果不想表格宽度随表头变化的话就将下面的width设为0intwidth=(int)myTable.getTableHeader().getDefaultRenderer().getTableCellRendererComponent(myTable,column.getIdentifier(),false,false,-1,col).getPreferredSize().getWidth();for(introw=0;row<rowCount;row++){intpreferedWidth=(int)myTable.getCellRenderer(row,col).getTableCellRendererComponent(myTable,myTable.getValueAt(row,col),false,false,row,col).getPreferredSize().getWidth();width=Math.max(width,preferedWidth);}header.setResizingColumn(column);//此行很重要column.setWidth(width+myTable.getIntercellSpacing().width);}}publicstaticvoidmain(String[]args){TableCellRenderer8re8=newTableCellRenderer8();re8.init();for(intI=0;I<20;I++){re8.addData2table("CJCO"+I,"3",0,false);}try{Thread.sleep(10000);}catch(InterruptedExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}re8.addData2table("CJCO!!!!","北京邮电大学",0,true);}//@Override//publicvoiditemStateChanged(ItemEvente){////TODOAuto-generatedmethodstub////获取改变的复选按键//Objectsource=e.getItemSelectable();//intindex=-1;//charc='-';//if(source==chin){//index=0;//c='c';//}elseif(source==glass){//index=1;//c='g';//}elseif(source==hire){//index=2;//c='h';//}elseif(source==teeth)//{//index=3;//c='t';//}//////判断改变的按键的改变后的状态//if(e.getStateChange()==ItemEvent.DESELECTED)//c='-';//////choice.setCharAt(index,c);////upDatePicture();//}publicstaticvoidcreateAndShowGUI(){JFrameframe=newJFrame("复选框测试");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);JComponentpanel=newTableCellRenderer8();frame.add(panel);frame.pack();frame.setLocationRelativeTo(null);frame.setVisible(true);}privateImageIconcreateImageIcon(Stringstring){URLurl=TableCellRenderer8.class.getResource(string);if(url!=null)returnnewImageIcon(url);elseSystem.out.println("image"+string+"notexist!");returnnull;}privatevoidupDatePicture(){ImageIconii=createImageIcon(File.separator+"images"+File.separator+"geek"+File.separator+"geek-"+choice.toString()+".gif");}@OverridepublicvoiditemStateChanged(ItemEvente){//TODOAuto-generatedmethodstub}@OverridepublicvoidactionPerformed(ActionEvente){//TODOAuto-generatedmethodstub}}classExtendedTableModel8extendsDefaultTableModel{/****/privatestaticfinallongserialVersionUID=1L;//重新提供一个构造器,该构造器的实现委托给DefaultTableModel父类publicExtendedTableModel8(String[]columnNames,Object[][]cells){super(cells,columnNames);}////重写getColumnClass方法,根据每列的第一个值来返回其真实的数据类型publicClassgetColumnClass(intc){returngetValueAt(0,c).getClass();}}classGenderTableCellRenderer8extendsDefaultTableCellRenderer{/****/privatestaticfinallongserialVersionUID=1L;privateStringcellValue;//定义图标的宽度和高度finalintICON_WIDTH=23;finalintICON_HEIGHT=21;publicComponentgetTableCellRendererComponent(JTabletable,Objectvalue,booleanisSelected,booleanhasFocus,introw,intcolumn){if(valueinstanceofIcon){this.setIcon((Icon)value);}elseif(valueinstanceofString){this.setText((String)value);}elseif(valueinstanceofTimeLabel){return(Component)value;}//设置选中状态下绘制边框if(hasFocus){setBorder(UIManager.getBorder("Table.focusCellHighlightBorder"));}else{setBorder(null);}returnthis;}////重写paint方法,负责绘制该单元格内容//publicvoidpaint(Graphicsg){////如果表格值为"男"或"male",则绘制一个男性图标//if(cellValue.equalsIgnoreCase("男")//||cellValue.equalsIgnoreCase("male")){//drawImage(g,newImageIcon("icon/male.gif").getImage());//}////如果表格值为"女"或"female",则绘制一个女性图标//if(cellValue.equalsIgnoreCase("女")//||cellValue.equalsIgnoreCase("female")){//drawImage(g,newImageIcon("icon/female.gif").getImage());//}//}//绘制图标的方法//privatevoiddrawImage(Graphicsg,Imageimage){//g.drawImage(image,(getWidth()-ICON_WIDTH)/2,//(getHeight()-ICON_HEIGHT)/2,null);//}}

上述代码运行结果如下:我希望能够把上面的运行效果中的第3列”员工性别“和第4列”员工本单维护时间“之间,添加一个”员工擅长方向“的JTable列。  并且,能够让小弟的可以在本列位置添加一个String类型的数据,让用户能够得到”自己的员工擅长方向“的总览管理。希望高手能够指教:上面的需求,小弟的代码要怎么修改,能够完成客户的要求?谢谢伟大的Swing,伟大的高手,伟大的CSDN,伟大的CSDN共享精神!!

解决方案

解决方案二:
高手,小弟已经把上面的问题解决。现在小弟遇到的困难是:怎么做,能够把上面的代码,做出”JCheckBox在被用户点击的时候“,能够捕捉这个动作?上面的代码,小弟看了好久,不知道其中的”运行效果的JCheckBox“的效果,是怎么跑出来的.希望高手能够指导:全类型唯一的一个“位于第111行”的newJCheckBox()的创建JCheckBox实例的语句,为什么被注释掉了,还能够让JCheckBox的运行效果显示出来?小弟要进行对应的“JCheckBox的监视器“的添加,好让小弟的程序,能够面对用户的”复选框点击“实现”写好的代码的执行“.
解决方案三:
在itemStateChanged函数里做publicvoiditemStateChanged(ItemEvente){JCheckBoxbox=(JCheckBox)e.getItemSelectable();if(box.isSelected())//这里是选中事件,在这里处理。}

时间: 2024-09-17 03:57:28

请教一个Java的Swing技术问题.的相关文章

线程中止-请教一个JAVA线程的奇怪问题

问题描述 请教一个JAVA线程的奇怪问题 在学习JAVA线程时候的遇到一个很奇怪的现象.让我们先来看代码 public class TestThread { public static void main(String[] args) { IRun ir = new IRun(); Thread it = new Thread(ir); it.start(); try { Thread.sleep(1000); } catch (InterruptedException ex) { Logger

java-新手请教一个JAVA问题,急用。

问题描述 新手请教一个JAVA问题,急用. 我用JAVA在一个包中写了MultiThreadMatrix.java和Jiemian.java.MultiThreadMatrix.java是一个并行矩阵计算程序,怎么让Jiemian.java中的一个按钮b3,点击b3执行MultiThreadMatrix.java,并将结果输出在Jiemian.java的文本框中.图中RUN就是b3 MultiThreadMatrix.java的打印的结果是,先让你输入想建立的线程个数,然后输出每个线程计算哪一行

泛型-请教一个JAVA的基础问题

问题描述 请教一个JAVA的基础问题 有如下的一个接口,叫做:GenericDao,有几点不理解: 1.虽然知道E,K,V都是泛型,但是一直不太理解有什么用,比如:>这段代码有什么用,实现什么功能?如果不写会有什么影响? 2.为什么在类的定义中还可以extends,一般不都是 class A1 extends A,这么写么?为什么可以class A1 package com.patsnap.common.bean; import com.patsnap.common.entity.DBVersi

请教一个Java应用软件的设计问题

问题描述 各位大侠,我们正在设计一个制作家具的软件,其本功能就是需要让软件使用者可以在界面上使用一些Graphics功能来设计家具,有点象AutoCAD,但没有那么复杂.以往这种软件都是用MSC语言写的,但因为我们希望这个应用软件可以通WebBrowser来启动,并且希望设计的Job可以都被存在一个服务器上的数据库里,以便被共享和管理.所以,我们准备用JavaWebStart技术来实现,但是我们有许多顾虑,Java的稳定性,网速对JavaWebStart的要求,Java有没有足够的Graphic

请教一个java web 启动服务问题?

问题描述 我是struts1+hibernate+spring结合的项目想做一个项目启动的时候就向数据库里面插入一条数据.1.集成strutsPlugIn时,这个WebApplicationContextwac=WebApplicationContextUtils.getWebApplicationContext(event.getServletContext());CompanyServicecompanyService=(CompanyService)wac.getBean("company

请教一个java线程的一个小问题,求程序执行流程,打印结果为1000 b=1000

问题描述 public class Test implements Runnable{int b = 100;public synchronized void m1() throws Exception{b =1000;Thread.sleep(5000);System.out.println("b:"+b);}public synchronized void m2() throws Exception{Thread.sleep(2500);b = 2000;}public void

大家好,第一次来这个论坛,请教一个Java数据库问题

问题描述 为什么执行这个Java连接数据库后,什么都不显示,代码如下importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.ResultSetMetaData;importjava.sql.Statement;//测试类publicclassExec{publicstaticvoidmain(String[]args){//数据库连接Connectioncon=n

请教一个java socket问题

问题描述 packagedbutil;importjava.io.*;importjava.net.*;publicclassSocketServer{ServerSocketss=null;Sockets=null;DataInputStreaminStream=null;DataOutputStreamoutStream=null;publicSocketServer(){try{init();}catch(Exceptione){System.out.println(e.toString(

请教一个关于java的项目问题

问题描述 请教一个关于java的项目问题 解决方案 类似的http://down.51cto.com/data/2009264http://download.csdn.net/detail/u010777420/5426033 解决方案二: 你自己先试着做呗,你先熟悉Java Web从前台到后端的流程,一块块地实现,自己实现的东西,即使碰到问题,自己解决,收获会很大的. 解决方案三: 这跟我前一段时间写的 差不多, 用 java web, 我博客里有内容分页实现,登录注册,类比的可以写出来这些,