Java Swing 表格 如何选择和过滤行和列

概要:

Java Swing 表格 如何选择和过滤行和列

| |目录

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;
public class TableSelectionTest {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {
			UIManager
					.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
		} catch (Throwable e) {
			e.printStackTrace();
		}
		EventQueue.invokeLater(new Runnable() {
			@Override
			public void run() {
				// TODO Auto-generated method stub
				JFrame frame = new TableSelectionFrame();
				frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				frame.setVisible(true);
			}
		});
	}
}
class TableSelectionFrame extends JFrame {
	private static final long serialVersionUID = 7407634572665780193L;
	public TableSelectionFrame() {
		setTitle("TableSelectionTest");
		setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
		model = new DefaultTableModel(10, 10);
		for (int i = 0; i < model.getRowCount(); i++) {
			for (int j = 0; j < model.getColumnCount(); j++) {
				model.setValueAt((i + 1) + (j + 1), i, j);
			}
		}
		table = new JTable(model);
		add(new JScrollPane(table), BorderLayout.CENTER);
		removedColumns = new ArrayList<TableColumn>();
		// create menu
		JMenuBar menuBar = new JMenuBar();
		// 添加菜单栏
		setJMenuBar(menuBar);
		JMenu selectionMenu = new JMenu("Selection");
		menuBar.add(selectionMenu);
		final JCheckBoxMenuItem rowsItem = new JCheckBoxMenuItem("Rows");
		final JCheckBoxMenuItem columnsItem = new JCheckBoxMenuItem("Columns");
		final JCheckBoxMenuItem cellsItem = new JCheckBoxMenuItem("Cells");
		// getRowSelectionAllowed() 如果可以选择行,则返回true
		rowsItem.setSelected(table.getRowSelectionAllowed());
		columnsItem.setSelected(table.getColumnSelectionAllowed());
		cellsItem.setSelected(table.getCellSelectionEnabled());
		rowsItem.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent event) {
				// TODO Auto-generated method stub
				// 取消选中所有已选定的行和列。
				table.clearSelection();
				table.setRowSelectionAllowed(rowsItem.isSelected());
				cellsItem.setSelected(table.getCellSelectionEnabled());
			}
		});
		selectionMenu.add(rowsItem);
		columnsItem.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent event) {
				// TODO Auto-generated method stub
				table.clearSelection();
				table.setColumnSelectionAllowed(columnsItem.isSelected());
				cellsItem.setSelected(table.getCellSelectionEnabled());
			}
		});
		selectionMenu.add(columnsItem);
		cellsItem.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent event) {
				// TODO Auto-generated method stub
				table.clearSelection();
				table.setCellSelectionEnabled(cellsItem.isSelected());
				rowsItem.setSelected(table.getRowSelectionAllowed());
				columnsItem.setSelected(table.getColumnSelectionAllowed());
			}
		});
		selectionMenu.add(cellsItem);
		JMenu tableMenu = new JMenu("Edit");
		//添加到菜单栏
		menuBar.add(tableMenu);
		/*
		 * 移除被选定的列
		 */
		// 菜单项
		JMenuItem hideColumnsItem = new JMenuItem("Hide Columns");
		hideColumnsItem.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent event) {
				// TODO Auto-generated method stub
				// 获取被选定的列
				int[] selected = table.getSelectedColumns();
				// 获取列模型对象
				TableColumnModel columnModel = table.getColumnModel();
				// remove columns from view,starting at the last
				// index so that column number aren't affected
				for (int i = selected.length - 1; i >= 0; i--) {
					// 获取被选定的列
					TableColumn column = columnModel.getColumn(selected[i]);
					// 移除被选定的列
					table.removeColumn(column);
					// store removed column for "show columns" command
					removedColumns.add(column);
				}
			}
		});
		tableMenu.add(hideColumnsItem);
		/*
		 * 显示被移除的列
		 */
		JMenuItem showColumnsItem = new JMenuItem("Show Columns");
		showColumnsItem.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent event) {
				// TODO Auto-generated method stub
				for (TableColumn tc : removedColumns) {
					// 向表格中添加列
					table.addColumn(tc);
				}
			}
		});
		tableMenu.add(showColumnsItem);
		/*
		 * 添加表格行
		 */
		JMenuItem addRowItem = new JMenuItem("Add Row");
		addRowItem.addActionListener(new ActionListener() {
			// add a new row to the multiplication table int
			// the model
			@Override
			public void actionPerformed(ActionEvent event) {
				// TODO Auto-generated method stub
				Integer[] newCells = new Integer[model.getColumnCount()];
				for (int i = 0; i < newCells.length; i++) {
					newCells[i] = (i + 1) + (model.getRowCount() + 1);
					model.addRow(newCells);
				}
			}
		});
		tableMenu.add(addRowItem);
		/*
		 * 移除被选定的行
		 */
		JMenuItem removeRowsItem = new JMenuItem("Remove Rows");
		removeRowsItem.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent event) {
				// TODO Auto-generated method stub
				int[] selected = table.getSelectedRows();
				for (int i = selected.length - 1; i >= 0; i--) {
					model.removeRow(selected[i]);
				}
			}
		});
		tableMenu.add(removeRowsItem);
		/*
		 * 将所有被选中的单元格值置为0
		 */
		JMenuItem clearCellsItem = new JMenuItem("Clear Cells");
		clearCellsItem.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent event) {
				// TODO Auto-generated method stub
				for (int i = 0; i < table.getRowCount(); i++) {
					for (int j = 0; j < table.getColumnCount(); j++) {
						if (table.isCellSelected(i, j))
							table.setValueAt(0, i, j);
					}
				}
			}
		});
		tableMenu.add(clearCellsItem);
	}
	// 创建默认的表格模型
	private DefaultTableModel model;
	// 创建表格
	private JTable table;
	// 用于存储被移除的表格列对象
	private ArrayList<TableColumn> removedColumns;
	private static final int DEFAULT_WIDTH = 400;
	private static final int DEFAULT_HEIGHT = 300;
}
评论关闭
评论 还能输入200
评论关闭
评论 还能输入200
资料加载中...
已关注 , 取消