请教一个Swing技术的“刷新用户JTable界面”的技术.

问题描述

我弄了一个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();}}

学生怎么写,能够把它添加到学生在主题中贴出的类型的运行效果:中的蓝色方框中的一个字段中.并且能够让这里的计时,从用户的数据到达服务器后,就开始计算.希望得到二位尊敬的老师的代码演示.

时间: 2024-08-18 01:25:58

请教一个Swing技术的“刷新用户JTable界面”的技术.的相关文章

请教一个部署Swing服务器的技术解决方案.

问题描述 高手,您好:我弄了一个Swing的程序,现在,想试试做一个"网络服务器",让我的用户能够申请我的服务.我希望能够得到:如果我的本地条件是:①无线Wifi上网②有一个http://www.233.com/Java/zhuanye/20101205/160820358.html这个地址的函数.③有不过老师点拨的"花生壳"可以用.④可以转换成ADSL上网方式.我想获得:Swing手写的程序可以为网络中的用户提供服务.希望能够得到知识:有什么解决方案?希望能够得到

jQuery的Ajax用户认证和注册技术实例教程(附demo源码)_jquery

前面介绍了<jquery+ajax注册实时验证>及<jQuery使用$.ajax进行即时验证的方法>.这里进一步总结了jQuery的Ajax用户认证和注册技术.分享给大家供大家参考,具体如下: Ajax 表单提交是一个功能强大的技术,提供一种发送 web 表单的方法,无需重载浏览器窗口.jQuery 库让您使用 Ajax 表单提交功能进一步提供一个方便快捷的方法,以少量代码生成可用 Ajax 的 Web 表单.在本文中,学习如何使用 jQuery 创建基础 Ajax 表单提交,以及

后台-请教一个关于网站用户密码保存的问题

问题描述 请教一个关于网站用户密码保存的问题 之前自己做过一个简单的网页有登录注册功能的,但是我是直接将用户注册的名字和密码保存在数据库中,换句话说,我可以在数据库里直接看到用户的密码.当然这只是一个个人简单的小demo,但我想问一下,在实际投入运行的网站中,他们是怎样保存用户的密码的?后台人员能够从数据库中看得到用户的密码吗?如果看不到,那比如我们要修改密码的话,后台又是如何判断我输入的密码是否是原来的密码? 求教一下~谢谢~ 解决方案 一般来说,我们使用哈希(Hash)算法来存储密码. 其中

数字-请教一个很简单的关于azure的技术问题

问题描述 请教一个很简单的关于azure的技术问题 请教一个很简单的技术问题:假设在windows azure中的网站,被浏览次数在管理后台哪里可以看到?其中"请求"数字是访问次数吗? 解决方案 azure没有这样的功能,你可以在你的页面上嵌入一段脚本,让第三方网站帮你统计.百度.google都有这样的站长统计. 解决方案二: 您好, 据我所知,Azure website service中可以在monitor(监视)面板中通过添加"Metric"将"Req

技术-请教一个外网访问内部局域网页面的问题

问题描述 请教一个外网访问内部局域网页面的问题 我有一个网站服务器是搭建在公司内部,该服务器IP为192.168.1.3,做了端口映射到该服务器,这样我可以通过外网IP来访问该网站. 接下来就是我问题,希望大神帮我解答一下. 我有另外一个页面放在内网的另一台服务器上,IP为192.168.1.4,没有另外做端口映射到192.168.14,外网是无法访问的,我要如何做到通过外网IP访问192.168.1.3的服务器来链接访问到192.168.1.4的页面呢?不知道要用到什么技术? 解决方案 除了端

基于Ajax技术实现无刷新用户登录功能

代码如下: // JScript 文件 function usersLogon() { var userName = document.getElementById("txtuserName").value; var password = document.getElementById("txtpassword").value; var checkCode = document.getElementById("txtCheckCode").val

html5技术-想请教一个问题,svg 在不同的手机和浏览器显示出来的效果不一样怎么处理?

问题描述 想请教一个问题,svg 在不同的手机和浏览器显示出来的效果不一样怎么处理? 用svg画出的图形,在不同的手机上显示效果不一样改如何处理?

布局-请教一个在弹窗中的跳转问题

问题描述 请教一个在弹窗中的跳转问题 弹窗的布局是上下布局的,上面的是一个div,下面是一个div,在下面的div中有滚动条,显示多条数据,现在做了一个按钮浮窗,当点击相应的按钮时,滚动到相应的位置,我是用的a锚点跳转的,但是整个页面都跟着跳转,上面的div就不见了 解决方案 a标签阉割href属性 解决方案二: 有没有代码,贴出一部分看看 解决方案三: 表单1 表单2 表单3 表单4 表单5 表单6 ? ? ? ? ? 前一节点工作质量: 请选择...优秀良好中等一般 办理意见: 附件上传:

php+ajax实现无刷新动态加载数据技术

  无刷新功能我们用到很多很多的,下面我就来给各位介绍一个实例,就是实现php+ajax实现无刷新滚屏加载数据,例子非常的简单大家只要按流程来操作就可以了哦. 我们浏览有些网页的时候,当拉动浏览器的滚动条时到页底时,页面会继续自动加载更多内容供用户浏览.这种技术我暂且称它为滚屏加载技术.我们发现很多网站用到这种技术,必应图片搜索.新浪微博.QQ空间等将该技术应用得淋漓尽致. 滚屏加载技术,就是使用Javascript监视滚动条的位置,每次当滚动条到达浏览器窗口底部时,触发一个Ajax请求后台PH