问题描述
高手,我弄了一个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())//这里是选中事件,在这里处理。}