`

点击jtable的表头,数据会根据根据表头来排序

阅读更多
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import java.awt.Dimension;
import java.awt.GridLayout;

public class TableSortDemo extends JPanel {
	private static final long serialVersionUID = 1L;
	private boolean DEBUG = false;

	public TableSortDemo() {
		super(new GridLayout(1, 0));
		JTable table = new JTable(new MyTableModel());
		table.setPreferredScrollableViewportSize(new Dimension(500, 70));
		table.setFillsViewportHeight(true);
		table.setAutoCreateRowSorter(true);
		//这句话是重点        
		//Create the scroll pane and add the table to it.        
		JScrollPane scrollPane = new JScrollPane(table);

		//Add the scroll pane to this panel.        
		add(scrollPane);
	}

	class MyTableModel extends AbstractTableModel {
		private String[] columnNames = { "First Name", "Last Name", "Sport", "# of Years", "Vegetarian" };
		private Object[][] data = { { "Mary", "Campione", "Snowboarding", new Integer(5), new Boolean(false) },
				{ "Alison", "Huml", "Rowing", new Integer(3), new Boolean(true) },
				{ "Kathy", "Walrath", "Knitting", new Integer(2), new Boolean(false) },
				{ "Sharon", "Zakhour", "Speed reading", new Integer(20), new Boolean(true) },
				{ "Philip", "Milne", "Pool", new Integer(10), new Boolean(false) }, };

		public int getColumnCount() {
			return columnNames.length;
		}

		public int getRowCount() {
			return data.length;
		}

		public String getColumnName(int col) {
			return columnNames[col];
		}

		public Object getValueAt(int row, int col) {
			return data[row][col];
		} /*
			 * * JTable uses this method to determine the default renderer/ * editor for each cell. If we didn't implement this method, * then the
			 * last column would contain text ("true"/"false"), * rather than a check box.
			 */

		public Class getColumnClass(int c) {
			return getValueAt(0, c).getClass();
		} /* * Don't need to implement this method unless your table's * editable. */

		public boolean isCellEditable(int row, int col) { //Note that the data/cell address is constant,           
			//no matter where the cell appears onscreen.      
			if (col < 2) {
				return false;
			} else {
				return true;
			}
		} /* * Don't need to implement this method unless your table's * data can change. */

		public void setValueAt(Object value, int row, int col) {
			if (DEBUG) {
				System.out.println("Setting value at " + row + "," + col + " to " + value + " (an instance of " + value.getClass() + ")");
			}
			data[row][col] = value;
			// Normally, one should call fireTableCellUpdated() when     
			// a value is changed.  However, doing so in this demo     
			// causes a problem with TableSorter.  The tableChanged()   
			// call on TableSorter that results from calling   
			// fireTableCellUpdated() causes the indices to be regenerated  
			// when they shouldn't be.  Ideally, TableSorter should be   
			// given a more intelligent tableChanged() implementation,   
			// and then the following line can be uncommented.      
			// fireTableCellUpdated(row, col);      
			if (DEBUG) {
				System.out.println("New value of data:");
				printDebugData();
			}
		}

		private void printDebugData() {
			int numRows = getRowCount();
			int numCols = getColumnCount();
			for (int i = 0; i < numRows; i++) {
				System.out.print("    row " + i + ":");
				for (int j = 0; j < numCols; j++) {
					System.out.print("  " + data[i][j]);
				}
				System.out.println();
			}
			System.out.println("--------------------------");
		}
	}

	/** * Create the GUI and show it. For thread safety, * this method should be invoked from the * event-dispatching thread. */
	private static void createAndShowGUI() { //Create and set up the window.       
		JFrame frame = new JFrame("TableSortDemo");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//Create and set up the content pane.       
		TableSortDemo newContentPane = new TableSortDemo();
		newContentPane.setOpaque(true); //content panes must be opaque  
		frame.setContentPane(newContentPane); //Display the window.   
		frame.pack();
		frame.setVisible(true);
	}

	public static void main(String[] args) {
		//Schedule a job for the event-dispatching thread:        
		//creating and showing this application's GUI.       
		javax.swing.SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				createAndShowGUI();
			}
		});
	}
}

 

分享到:
评论

相关推荐

    JTable表头排序的两种方法

    以下是如何设置`JTable`表头排序的步骤: 1. **获取表头视图(HeaderView)**:`JTable`的表头视图是`JTableHeader`,它负责处理表头的点击事件。 2. **设置比较器(Comparator)**:为每一列设置一个自定义的`...

    JTable表头合并

    而"JTable表头合并"是Swing中的一个高级特性,允许开发者创建具有复杂结构的表头,以更好地呈现和组织数据。这种功能特别适用于那些需要将相关列分组或分类的情况。 表头合并是通过`DefaultTableColumnModel`的`...

    复杂JTable-跨列表头

    1. **GroupableTableHeaderUI**: 这是JTable表头的自定义UI实现,负责渲染合并后的表头。UI组件是Java Swing中的核心部分,它们决定了组件的外观和行为。GroupableTableHeaderUI将处理表头的绘制逻辑,包括合并区域...

    jtable多级表头

    7. **事件处理**:多级表头可能需要处理额外的事件,如点击多级表头进行排序,这时需要注册适当的事件处理器并实现相应的逻辑。 8. **样式与外观**:为了提供良好的用户体验,可能需要自定义`LookAndFeel`或使用CSS...

    Jtable表格分三组排序(支持中文)

    4. **事件监听**:为了响应用户的排序请求,例如点击表头,你可以添加一个`MouseListener`到JTable的列头。在鼠标点击事件中,根据用户选择的列调整排序键。 5. **比较器**:对于中文排序,Java的默认比较可能不...

    java--JTable排序实例源码

    这个实例“java--JTable排序实例源码”提供了一个功能,允许用户通过点击表头对`JTable`中的数据进行排序。这种功能在处理大量数据时非常实用,使得用户能轻松地查看和理解数据。 首先,我们来深入了解一下`JTable`...

    java swing 表头不可拖动

    在实际项目中,根据需求选择合适的方法来禁用JTable的列头拖动,不仅可以提高用户体验,也可以更好地控制数据的呈现方式。通过实践这些方法,你可以深化对Java Swing的理解,并进一步提升你的编程技能。

    JTable实现行间拖拽的最简单方法

    在Java Swing应用中,`JTable`是一种常用的组件,用于展示和操作二维数据。它提供了丰富的功能,如排序、选择和编辑。然而,`JTable`默认并不支持行间的拖放(Drag and Drop, DnD)操作。本文将详细介绍如何通过一种...

    解决JTable排序问题的方法详解

    用户点击表头时,`TableSorter` 会根据点击的列自动进行升序或降序排序。 为了实现这一功能,你需要创建一个自定义的`TableModel` 类(如`MyTableModel`),并确保它实现了`TableModel` 接口的所有方法。然后,将`...

    Java的Jtable、从数据库取数据显示在表格中

    ### Java的JTable:从数据库取数据显示在表格中的关键技术点 #### 一、数据库操作与JDBC连接 在Java中,使用JTable显示数据库中的数据是一个常见的应用场景。首先,我们需要了解如何通过Java Database ...

    jTable的使用

    只需设置`AutoCreateRowSorter`属性为`true`,用户点击表头即可进行排序。 3. **列宽调整**:用户可以通过拖动列边框来调整列宽。开发者也可以通过`setColumnWidth()`方法预设列宽。 4. **行选择**:jTable允许...

    JTable的使用收藏

    3.使用JTable+TableModel展示java中的数据对象 2.JTable展示方式的美化 1.设置表格的宽度和高度 2.要显示表头 3.新加列,将列设为下拉框 4.表格排序 3. JTable事件响应和项目设想 4.一个游戏:《java连连看》 1.需求...

    不错的jquery插件jtable

    - **排序功能**:用户可以通过点击表头来对数据进行升序或降序排序。 - **搜索过滤**:提供内置的搜索框,允许用户根据需要筛选数据。 - **列选择**:允许用户自定义显示哪些列,提供更好的用户体验。 - **行操作**...

    JAVA中JTable的使用方法

    在Java编程环境中,`JTable`是Swing库中的一个核心组件,用于展示二维数据集,通常用于创建表格视图。这个组件对于用户界面(UI)设计尤其重要,尤其是在需要显示和编辑数据库或其他数据源数据时。下面我们将深入...

    JTable实例大全

    `JTable`可以通过添加`TableRowSorter`来实现数据的排序功能。对于数据过滤,可以创建自定义的过滤器并应用到`TableModel`上。 7. **动态更新**: `JTable`的`TableModel`接口提供了添加、删除和修改行的方法,...

    固定表头的DataGrid

    首先,DataGrid通常用于展示数据库或其他数据源中的数据,具有分页、排序、过滤和编辑等多种功能。在Web应用中,DataGrid可以是基于JavaScript库(如jQuery UI的DataGrid或React的Ag-Grid)或者服务器端技术(如ASP...

    一个jTable的示例文件.rar

    - 如果需要排序,可以使用TableRowSorter,设置后,用户点击表头即可按指定列排序。 7. **单元格编辑** - isCellEditable(row, column):确定单元格是否可编辑。 - prepareEditor(editorComp, row, column):...

    Java JTable 使用

    - **排序**:通过设置`TableSorter`,用户可以点击表头进行排序。 - **选择与事件处理**:`SelectionModel`允许你处理行选择,而`MouseListener`和`KeyListener`可以监听用户的交互行为。 - **列操作**:可以隐藏...

Global site tag (gtag.js) - Google Analytics