`
lhx1026
  • 浏览: 307035 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

请您先登录,才能继续操作

在JTable中加载进度条及进行操作

阅读更多

我们在多文件下载或多事务处理时,经常会出现使用线程以提高效率的情况,而这时在GUI程序中如何表示进度,就成了一个不大不小的问题。
现在比较被大众接受的方式,大体就是如迅雷等下载工具中一样,用表格中加载进度条以进行显示。
而对于Swing来说,并没有现成的组件能够实现这一操作,还有下载的并发,似乎也需要额外进行处理。于是,我在此提供一个基于jdk1.6版本的示例, 以供参考。(因为jdk1.6提供了SwingWorker,简化了图形程序中的线程处理,使用其他jdk开发请替换此项即可)

本示例由两个java文件组成

MyTableModel.java

packageorg.loon.test;

importjava.awt.Component;
importjava.util.HashMap;
importjava.util.Map;

importjavax.swing.BorderFactory;
importjavax.swing.JProgressBar;
importjavax.swing.JTable;
importjavax.swing.SwingWorker;
importjavax.swing.table.DefaultTableCellRenderer;
importjavax.swing.table.DefaultTableModel;

/***//**
*<p>
*Title:LoonFramework
*</p>
*<p>
*Description:
*</p>
*<p>
*Copyright:Copyright(c)2007
*</p>
*<p>
*Company:LoonFramework
*</p>
*
*
@authorchenpeng
*@email:ceponline@yahoo.com.cn
*
@version0.1
*/

publicclassMyTableModelextendsDefaultTableModel...{
/***//**
*
*/

privatestaticfinallongserialVersionUID=1L;

privatestaticfinalColumnContext[]columnArray=...{
newColumnContext("ID",Integer.class,false),
newColumnContext("名称",String.class,false),
newColumnContext("进度",Integer.class,false)}
;

privatefinalMap<Integer,SwingWorker>swmap=newHashMap<Integer,SwingWorker>();

privateintnumber=0;

publicvoidaddTest(Testt,SwingWorkerworker)...{
Object[]obj
=...{newInteger(number),t.getName(),t.getProgress()};
super.addRow(obj);
swmap.put(number,worker);
number
++;
}


publicsynchronizedSwingWorkergetSwingWorker(intidentifier)...{
Integerkey
=(Integer)getValueAt(identifier,0);
returnswmap.get(key);
}


publicTestgetTest(intidentifier)...{
returnnewTest((String)getValueAt(identifier,1),
(Integer)getValueAt(identifier,
2));
}


publicbooleanisCellEditable(introw,intcol)...{
returncolumnArray[col].isEditable;
}



publicClass<?>getColumnClass(intmodelIndex)...{
returncolumnArray[modelIndex].columnClass;
}


publicintgetColumnCount()...{
returncolumnArray.length;
}


publicStringgetColumnName(intmodelIndex)...{
returncolumnArray[modelIndex].columnName;
}


privatestaticclassColumnContext...{
publicfinalStringcolumnName;

publicfinalClasscolumnClass;

publicfinalbooleanisEditable;

publicColumnContext(StringcolumnName,ClasscolumnClass,
booleanisEditable)...{
this.columnName=columnName;
this.columnClass=columnClass;
this.isEditable=isEditable;
}

}

}


classTest...{
privateStringname;

privateIntegerprogress;

publicTest(Stringname,Integerprogress)...{
this.name=name;
this.progress=progress;
}


publicvoidsetName(Stringstr)...{
name
=str;
}


publicvoidsetProgress(Integerstr)...{
progress
=str;
}


publicStringgetName()...{
returnname;
}


publicIntegergetProgress()...{
returnprogress;
}

}


classProgressRendererextendsDefaultTableCellRenderer...{
/***//**
*
*/

privatestaticfinallongserialVersionUID=1L;
privatefinalJProgressBarb=newJProgressBar(0,100);

publicProgressRenderer()...{
super();
setOpaque(
true);
b.setBorder(BorderFactory.createEmptyBorder(
1,1,1,1));
}


publicComponentgetTableCellRendererComponent(JTabletable,Objectvalue,
booleanisSelected,booleanhasFocus,introw,intcolumn)...{
Integeri
=(Integer)value;
Stringtext
="完成";
if(i<0)...{
//删除
text="取消完毕";
}
elseif(i<100)...{
b.setValue(i);
returnb;
}

super.getTableCellRendererComponent(table,text,isSelected,hasFocus,
row,column);
returnthis;
}

}


MyPanel.java

packageorg.loon.test;

importjava.awt.BorderLayout;
importjava.awt.Color;
importjava.awt.Component;
importjava.awt.Dimension;
importjava.awt.EventQueue;
importjava.awt.event.ActionEvent;
importjava.util.HashSet;
importjava.util.Random;

importjavax.swing.AbstractAction;
importjavax.swing.Action;
importjavax.swing.Icon;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JPanel;
importjavax.swing.JPopupMenu;
importjavax.swing.JScrollPane;
importjavax.swing.JSeparator;
importjavax.swing.JTable;
importjavax.swing.RowFilter;
importjavax.swing.SwingWorker;
importjavax.swing.WindowConstants;
importjavax.swing.table.TableCellRenderer;
importjavax.swing.table.TableColumn;
importjavax.swing.table.TableRowSorter;

//importorg.loon.framework.dll.NativeLoader;

/***//**
*<p>
*Title:LoonFramework
*</p>
*<p>
*Description:
*</p>
*<p>
*Copyright:Copyright(c)2007
*</p>
*<p>
*Company:LoonFramework
*</p>
*
*
@authorchenpeng
*@email:ceponline@yahoo.com.cn
*
@version0.1
*/

publicclassMyPanelextendsJPanel...{
/***//**
*
*/

privatestaticfinallongserialVersionUID=1L;

privatestaticfinalColorevenColor=newColor(250,250,250);

privatefinalMyTableModelmodel=newMyTableModel();

privatefinalTableRowSorter<MyTableModel>sorter=newTableRowSorter<MyTableModel>(
model);

privatefinalJTabletable;

publicMyPanel()...{
super(newBorderLayout());
table
=newJTable(model)...{
/***//**
*
*/

privatestaticfinallongserialVersionUID=1L;

publicComponentprepareRenderer(
TableCellRenderertableCellRenderer,
introw,intcolumn)...{
Componentcomponent
=super.prepareRenderer(tableCellRenderer,row,
column);
//背景色及字体设置
if(isRowSelected(row))...{
component.setForeground(getSelectionForeground());
component.setBackground(getSelectionBackground());
}
else...{
component.setForeground(getForeground());
component.setBackground((row
%2==0)?evenColor:table
.getBackground());
align=
分享到:
评论

相关推荐

    java的applet带进度条表格示例

    这个"java的applet带进度条表格示例"是一个经典的案例,它结合了Java Swing组件JTable和JProgressBar来创建一个交互式的表格,用户可以直观地看到表格中的某个任务或操作的进度。 首先,我们要了解JTable。JTable是...

    代码实现SQLServer数据库表中数据输出到图形用户界面归类.pdf

    使用`Thread`类创建新线程,并在`run`方法中循环插入数据,每次插入后更新JTable并刷新进度条。 6. **JProgressBar**: JProgressBar是Java Swing中的一个组件,用于显示进度。可以设置其最大值和当前值,以反映任务...

    JDBCJTable_java编程_

    同时,可能也考虑了性能优化,如使用批处理操作来提高数据读写效率,或者在用户进行大规模数据操作时显示进度条。 总的来说,"JDBCJTable"是一个融合了Java编程、数据库操作和用户界面设计的项目,它展示了如何在...

    xpTable,c# xptable NET中最强,最全功能的表格控件 ,可以定制一个ListView,能够在列中插入图像、下拉框、可上下调整的数字、进度条

    可以定制一个ListView,能够在列中插入图像、下拉框、可上下调整的数字、进度条等等。 [功能] 全定制可视化界面 支持XP风格 轻易添加再定制的控件 可隐藏列 行、列、单元可以被Disable 每个单元、列可以有Tooltip ...

    JAVA实现的EXCEL表格导入数据录入

    在Java中,我们通常使用JDBC(Java Database Connectivity)API来与各种类型的数据库进行交互。JDBC提供了一套标准的接口,允许程序员编写与数据库无关的代码。在连接数据库时,需要加载对应的数据库驱动,创建...

    Java窗体动态加载磁盘文件的实现方法

    通过`setIndeterminate(true)`,进度条开始无确定性的滚动,表明文件加载过程正在进行。一旦文件列表加载完成,使用`setIndeterminate(false)`停止滚动,表示操作已完成。 文件加载的具体实现通常包括以下步骤: 1...

    Java Swing数据库管理系统

    3. **查询功能**:用户可能可以通过输入条件进行查询,系统使用SQL语句在后台执行查询,并在JTable中显示结果。 4. **数据库操作**:系统可能包含了添加、删除、更新记录的功能,这些都是通过与数据库API(如JDBC)...

    11、JavaSwing+MySQL的图书馆管理系统.zip

    开发者可以使用JFrame作为主窗口,JButton创建各种操作按钮,JLabel显示提示信息,JTable展示图书列表,JOptionPane用于弹出对话框进行信息确认或错误提示。通过这些组件,用户可以直观地看到图书信息,进行借书、还...

    XPTable源代码

    XPTable是一款功能强大的Java Swing组件,它扩展了标准的JTable类,提供了许多高级特性,使得在Java应用程序中创建复杂的表格视图变得容易。XPTable的源代码是开源的,因此开发者可以深入研究其内部机制,自定义和...

    学生管理系统小项目

    为了提高用户体验,还可以引入对话框(JOptionPane)提示用户操作结果,以及进度条(JProgressBar)显示数据加载状态。 最后,项目结构清晰,模块化设计是关键。每个类应专注于自己的职责,使得代码易于理解和扩展...

    contacts.zip

    在数据库操作中,可能会遇到如连接失败、SQL语法错误等问题,此时应捕获并适当地处理这些异常,如显示错误信息,而不是让程序突然崩溃。此外,还可以加入进度条或提示信息,让用户了解操作状态,提升交互体验。 六...

    基于J2SE的音乐播放器

    【基于J2SE的音乐播放器】是一种使用Java标准版(Java 2 Standard ...总的来说,开发这样一个音乐播放器涉及了Java GUI编程、音频处理、文件操作等多个方面的技术知识,充分展示了J2SE在桌面应用开发中的强大能力。

    Java写的一个mp3播放器.rar

    在这个播放器中,开发者可能使用它来加载、解码MP3文件,并通过`Clip`或`DataLine`接口进行播放控制。 - **解码库**:由于Java原生对某些音频格式支持有限,如MP3,可能需要引入第三方库,如JLayer或JAVE,来处理...

    OpenSwing java组件大全

    它不仅包含Swing的标准组件(如JButton、JLabel、JTextArea等),还添加了许多自定义组件,如进度条、滑块、日历选择器、下拉菜单等,这些组件在标准Swing库中可能不具备或功能有限。 1. **JOpenButton**:...

    java swing

    4. **SwingWorker**:用于执行耗时操作,防止界面阻塞,提供进度条和取消操作的支持。 总的来说,Java Swing 提供了强大的工具和灵活性,让开发者能够构建出功能丰富且用户友好的桌面应用程序。通过不断学习和实践...

    java源码:开源的Swing组件 JIDE.zip

    2. **表格组件增强**:JIDE扩展了Java Swing的JTable,增加了诸如多选、列排序、列过滤、自定义单元格编辑等功能,使得表格操作更加方便且功能强大。 3. **分组表(GroupTable)和树表(TreeTable)**:JIDE引入了...

    java的c/s结构的考试通过率统计

    在这个模式中,客户端(通常是用户界面)与服务器端(处理业务逻辑和数据存储)进行交互。在"java的c/s结构的考试通过率统计"这个主题中,我们将探讨如何使用Java的Swing库来创建客户端应用程序,以及如何设计数据库...

    超市管理系统(Swing)

    在超市管理系统中,Swing的组件如JFrame(窗口)、JPanel(面板)、JButton(按钮)、JTable(表格)等被广泛使用,以实现各种交互操作。此外,Swing还支持事件监听机制,使得用户与系统的交互变得更加灵活。 这个...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    本书是第II卷,以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用Java进行桌面程序开发各个方面的知识和技巧,主要包括Java语法与面向对象技术、Java高级应用、窗体与控件应用、文件操作典型...

Global site tag (gtag.js) - Google Analytics