網上看到的凍結Table列的代碼,是通過兩個Table來實現。現有一個第三方控件包jsuit,有jpvTableView控件,可以實現凍結的功能,但是沒有凍結表頭。
- importjava.awt.BorderLayout;
-
importjava.awt.event.WindowAdapter;
-
importjava.awt.event.WindowEvent;
-
- importjavax.swing.*;
-
importjavax.swing.event.ListSelectionEvent;
-
importjavax.swing.event.ListSelectionListener;
- importjavax.swing.table.AbstractTableModel;
-
-
publicclassJtableTestextendsJFrame{
-
privatestaticfinallongserialVersionUID=1L;
-
- Object[][]data;
-
- Object[]column;
-
- JTablefixedTable,table;
-
-
publicJtableTest(){
-
super("FixedColumnExample");
- setSize(400,150);
-
-
data=newObject[][]{{"1","11","A","","","","",""},
-
{"2","22","","B","","","",""},
-
{"3","33","","","C","","",""},
-
{"4","44","","","","D","",""},
-
{"5","55","","","","","E",""},
-
{"6","66","","","","","","F"}};
-
column=newObject[]{"fixed1","o","a","b","c","d","e","f"};
-
-
AbstractTableModelfixedModel=newAbstractTableModel(){
-
privatestaticfinallongserialVersionUID=1L;
-
-
publicintgetColumnCount(){
-
return1;
- }
-
-
publicintgetRowCount(){
-
returndata.length;
- }
-
-
publicStringgetColumnName(intcol){
-
return(String)column[col];
- }
-
-
publicObjectgetValueAt(introw,intcol){
-
returndata[row][col];
- }
- };
-
AbstractTableModelmodel=newAbstractTableModel(){
-
privatestaticfinallongserialVersionUID=1L;
-
-
publicintgetColumnCount(){
-
returncolumn.length-2;
- }
-
-
publicintgetRowCount(){
-
returndata.length;
- }
-
-
publicStringgetColumnName(intcol){
-
return(String)column[col+1];
- }
-
-
publicObjectgetValueAt(introw,intcol){
-
returndata[row][col+1];
- }
-
-
publicvoidsetValueAt(Objectobj,introw,intcol){
- data[row][col+1]=obj;
- }
-
-
publicbooleanCellEditable(introw,intcol){
-
returntrue;
- }
- };
-
-
fixedTable=newJTable(fixedModel);
- fixedTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
- fixedTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
- fixedTable.getSelectionModel().addListSelectionListener(
-
newListSelectionListener(){
-
publicvoidvalueChanged(ListSelectionEventarg0){
-
checkSelection(true);
-
- }
- });
-
-
table=newJTable(model);
- table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
- table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
- table.getSelectionModel().addListSelectionListener(
-
newListSelectionListener(){
-
publicvoidvalueChanged(ListSelectionEventarg0){
-
checkSelection(false);
- }
- });
-
-
JViewportviewport=newJViewport();
- viewport.setView(fixedTable);
- viewport.setPreferredSize(fixedTable.getPreferredSize());
-
-
JScrollPanescroll=newJScrollPane(table);
- scroll.setRowHeaderView(viewport);
- scroll.setCorner(JScrollPane.UPPER_LEFT_CORNER,fixedTable
- .getTableHeader());
-
- getContentPane().add(scroll,BorderLayout.CENTER);
- }
-
-
privatevoidcheckSelection(booleanisFixedTable){
-
intfixedSelectedIndex=fixedTable.getSelectedRow();
-
intselectedIndex=table.getSelectedRow();
-
if(fixedSelectedIndex!=selectedIndex){
-
if(isFixedTable){
- table.setRowSelectionInterval(fixedSelectedIndex,
- fixedSelectedIndex);
-
}else{
- fixedTable
- .setRowSelectionInterval(selectedIndex,selectedIndex);
- }
- }
-
- }
-
-
publicstaticvoidmain(String[]args){
-
JtableTestframe=newJtableTest();
-
frame.addWindowListener(newWindowAdapter(){
-
publicvoidwindowClosing(WindowEvente){
- System.exit(0);
- }
- });
-
frame.setVisible(true);
- }
- }
分享到:
相关推荐
在Java环境中,可能涉及到JavaFX的TableView或Swing的JTable组件。 压缩包子文件的文件名称列表中有"冻结行和列.html"和"freeze 第一列.html",这可能分别代表了一个示例网页,展示了如何冻结整个表格的行和仅冻结...
4. **高级功能**:如行列拖放、分页、冻结列、合并单元格、自定义列宽等。 5. **事件处理**:可能提供了更加方便的事件监听和处理机制,使得对用户交互的响应更加简单。 6. **国际化支持**:方便进行多语言切换。 7....
还有冻结列和行的功能,这在处理大型表格时非常有用,可以保持关键列或行始终可见。此外,它还支持多选、行列合并、以及自定义快捷键等,进一步提高了操作效率。 压缩包中的"myjtable-1.1"可能包含了MyJTable的源...
9. **线程处理**:为了保证用户界面的响应性,耗时操作(如从数据库读取大量数据)应放在后台线程执行,防止UI冻结。可以使用`SwingWorker`类来实现这一目的。 通过上述技术,我们可以构建出一个基本的Java Swing...
为了解决Swing组件在执行耗时任务时可能导致UI冻结的问题,Swing提供了一个名为SwingWorker的类。它允许在后台线程中执行计算,然后在事件调度线程中更新UI,确保了界面的响应性。 10. **JTable和TableModel**: ...
4. **线程处理**:由于文件操作可能耗时,为了保持UI的响应性,可能需要在后台线程(如SwingWorker)执行这些任务,防止UI冻结。 5. **对话框和通知**:为了与用户进行交互,应用可能会使用JOptionPane来显示警告或...
8. **多线程**:如果检索过程可能导致界面冻结,那么可能采用了多线程来异步处理查询请求,保持GUI的响应性。 9. **异常处理**:在Java编程中,良好的异常处理策略是必不可少的,尤其是在与数据库交互和文件操作时...
8. **线程管理**:为了保持用户界面的响应性,耗时的操作如数据库查询应放在后台线程(如SwingWorker)执行,防止UI冻结。 9. **异常处理**:良好的错误处理是任何应用的基础。Java的try-catch-finally语句块用于...
- Swing是Java AWT(Abstract Window Toolkit)的扩展,提供了更多美观且自定义程度高的组件,如JFrame、JButton、JLabel、JTable等。 - Swing使用事件监听机制,通过事件处理器(Event Handler)处理用户交互,...
10. **SwingWorker**:SwingWorker是用于在后台线程执行耗时任务的类,防止UI冻结。它支持进度报告和取消操作,使GUI保持响应性。 通过阅读《Java Swing(第二版)》的源码,开发者不仅可以深入理解Swing的工作原理,...
8. 多线程和并发:在Swing应用中,正确处理多线程至关重要,因为它可以避免UI冻结。文档会介绍如何在Swing中安全地使用线程,并展示最佳实践。 9. 示例代码:压缩包中的"swing-hacks-examples-20060109.zip"包含了...
此外,Swing还支持SwingWorker,这是一个用于在后台线程执行耗时任务的类,避免了用户界面的冻结。 总的来说,"精通Java Swing程序设计"涵盖了从基础组件的使用到高级特性的探索,对于初学者来说,理解并掌握这些...
当模型涉及到远程数据源或长时间运行的任务时,这可能导致界面冻结。为了解决这一问题,文章提出了两种方法: 1. **动态树(DynamicTree)**:这是一个使用后台线程来动态展开`JTree`节点的示例。动态树采用了分裂...
此外,Swing支持SwingWorker,使得在GUI线程之外执行耗时任务成为可能,避免了UI冻结。 七、国际化与 Accessibility Swing支持应用的国际化,允许开发者为不同语言的用户提供界面。同时,Swing组件遵循无障碍标准,...
6. JTable和JTree:Swing提供了用于数据展示的高级组件,如JTable用于显示表格数据,JTree用于呈现层次结构数据。 博文可能还会涉及以下知识点: 1. Layout Managers:Swing使用布局管理器(如FlowLayout、...
在Swing中,还有许多高级特性,如拖放支持、打印功能、定时器(Timer)以及对SwingWorker的支持,后者允许在后台线程中执行耗时操作,防止用户界面冻结。 总的来说,Swing为Java开发者提供了一套全面的工具,用于...
9. **SwingWorker**:SwingWorker 类为在事件调度线程之外执行耗时任务提供了便利,确保UI的响应性,防止“冻结”现象。 在《Java图形设计卷2:Swing》这本书中,你将深入学习如何使用这些特性来创建功能丰富的Java...
8. **SwingWorker**:SwingWorker是处理后台任务的类,解决了Swing组件在事件调度线程上执行长时间任务导致界面冻结的问题。通过使用SwingWorker,开发者可以确保界面的响应性。 9. **国际化和本地化**:Swing支持...