问题描述
我弄了一个Swing的JFrame界面:我希望能够在我的用户提交了数据后,我的服务器,能够在管理员的面前,即时把UI刷新,添加一笔新的注册用户的数据进来.源代码如下:packaged_port_package;importjava.awt.Component;importjava.awt.Graphics;importjava.awt.Image;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.ImageIcon;importjavax.swing.JButton;importjavax.swing.JComponent;importjavax.swing.JFrame;importjavax.swing.JPanel;importjavax.swing.JScrollPane;importjavax.swing.JTable;importjavax.swing.UIManager;importjavax.swing.table.DefaultTableModel;importjavax.swing.table.JTableHeader;importjavax.swing.table.TableCellRenderer;importjavax.swing.table.TableColumn;publicclassCopyOfCopyOfTestTableCellRendererextendsJPanelimplementsItemListener,ActionListener{publicCopyOfCopyOfTestTableCellRenderer(){jb.addActionListener(this);}StringBufferchoice;JButtonjb=newJButton();JFramejf=newJFrame("使用单元格绘制器");JTabletable;//定义二维数组作为表格数据Object[][]tableData={};publicstaticHashMap<String,Object[]>tableList=newHashMap<String,Object[]>(){/****/privatestaticfinallongserialVersionUID=1L;{for(inti=0;i<100000;i++){put(String.valueOf(i),newObject[]{"王二小"+i,29,"男",newImageIcon("icon/3.gif"),true});}}};publicvoidaddData2table(Object[]list,intmyuserIndex){tableList.put(DRecv.BJMemUID[myuserIndex],list);}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对象ExtendedTableModel0model=newExtendedTableModel0(columnTitle0,toArray(tableList));//以ExtendedTableModel来创建JTabletable=newJTable(model);table.setRowSelectionAllowed(false);table.setRowHeight(40);//获取第三列TableColumnlastColumn=table.getColumnModel().getColumn(2);//对第三列采用自定义的单元格绘制器lastColumn.setCellRenderer(newGenderTableCellRenderer0());//将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);}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){newCopyOfCopyOfTestTableCellRenderer().init();}//@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=newCopyOfCopyOfTestTableCellRenderer();frame.add(panel);frame.pack();frame.setLocationRelativeTo(null);frame.setVisible(true);}privateImageIconcreateImageIcon(Stringstring){URLurl=CopyOfCopyOfTestTableCellRenderer.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}}classExtendedTableModel0extendsDefaultTableModel{/****/privatestaticfinallongserialVersionUID=1L;//重新提供一个构造器,该构造器的实现委托给DefaultTableModel父类publicExtendedTableModel0(String[]columnNames,Object[][]cells){super(cells,columnNames);}//重写getColumnClass方法,根据每列的第一个值来返回其真实的数据类型publicClassgetColumnClass(intc){returngetValueAt(0,c).getClass();}}classGenderTableCellRenderer0extendsJPanelimplementsTableCellRenderer{/****/privatestaticfinallongserialVersionUID=1L;privateStringcellValue;//定义图标的宽度和高度finalintICON_WIDTH=23;finalintICON_HEIGHT=21;publicComponentgetTableCellRendererComponent(JTabletable,Objectvalue,booleanisSelected,booleanhasFocus,introw,intcolumn){cellValue=(String)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);}}
请问:如果现在有一位用户把自己的注册数据新提交到我的系统中,我希望能够在用户的面牵添加一笔资料,让我的管理员能够看到“即时增加了一笔数据到本JFrame中”,就像这样一笔新添加进来的数据,展示出如下的添加效果:并且,是从“JFrame的上面”“第一行添加进来”的方式进行用户面前运行效果的实现.请问:1.我的代码,应该怎么写,能够让我的需求,被实现出来.如果高手有时间,小弟希望高手能够指导:2.若我想把“打了勾”的复选框的一笔资料在用户的面前remove,我应该怎么做.谢谢CSDN!!
解决方案
解决方案二:
并且,为什么上面的代码运行后的效果为:我用第52行的循环生成的JTable表格中的数据,会:“不是按照顺序排列”的?希望CSDN的版主,高手,路过的诸佛龙象,能够为小弟的这个作业的最后的“锦上添花”,再加一笔.感谢CSDN!!
解决方案三:
Swing高手,请进.
解决方案四:
1.你最终要操作的只是数据,在不排序的情况下把数据加到tableList的第一位(是tableList吧,没仔细看你的代码),然后刷新表格就行了2.同样的,得到选中的行号,然后把他们从tableList中删除就行了,同时刷新表格,最后一个就是排序,百度一下有很多方法,好像有个table.setRowSorter
解决方案五:
1.客户提交数据2.服务器收到数据保存到数据库,并把这条数据发送给管理员3.管理员的tablemodel添加这条数据就自动显示出来了。至于这三个软件之间怎么通讯就是你需要考虑的,可以用Socket(如Netty)
解决方案六:
引用
1.客户提交数据2.服务器收到数据保存到数据库,并把这条数据发送给管理员3.管理员的tablemodel添加这条数据就自动显示出来了。至于这三个软件之间怎么通讯就是你需要考虑的,可以用Socket(如Netty)
引用
1.你最终要操作的只是数据,在不排序的情况下把数据加到tableList的第一位(是tableList吧,没仔细看你的代码),然后刷新表格就行了2.同样的,得到选中的行号,然后把他们从tableList中删除就行了,同时刷新表格,最后一个就是排序,百度一下有很多方法,好像有个table.setRowSorter
感谢尊敬的CSDN乔布斯的左手,公孙二狗大哥的再次相助!!同样感谢忘了隐藏哥哥的点拨!!现在小弟基本上解决了上面的需求,小弟现在希望得到二位老师的再次点拨:下面的类型:importjava.awt.FlowLayout;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.WindowAdapter;importjava.awt.event.WindowEvent;importjava.text.SimpleDateFormat;importjava.util.Date;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.Timer;publicclassTimeextendsJFrame{JLabellbl=newJLabel();Datenow=newDate();publicTime(){lbl.setText("00:30:00");now.setHours(0);now.setMinutes(30);now.setSeconds(0);setAlwaysOnTop(true);Timertimer=newTimer(1000,newActionListener(){publicvoidactionPerformed(ActionEvente){now=newDate(now.getTime()-1000);SimpleDateFormatformatter=newSimpleDateFormat("HH:mm:ss");lbl.setText(formatter.format(now));}});timer.start();this.setLayout(newFlowLayout());this.add(lbl);this.setSize(300,200);this.setVisible(true);this.addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){System.exit(0);}});}publicstaticvoidmain(String[]args){Timet=newTime();}}
学生怎么写,能够把它添加到学生在主题中贴出的类型的运行效果:中的蓝色方框中的一个字段中.并且能够让这里的计时,从用户的数据到达服务器后,就开始计算.希望得到二位尊敬的老师的代码演示.