ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java设置表格的选择模式

2020-02-04 15:35:54  阅读:344  来源: 互联网

标签:多行 Java 表格 java awt 设置 swing import javax


对于一个表格,我们可以设置其选择模式:设置每次选择一行或者连续多行,或者任意连续多行。我们也可以设置其列的选择模型。
先创建表格

JTable table=new JTable();

对于行选择方式,应该调用
getSelectionModel().setSelectionMode(model);函数
其中model是ListSelectionModel接口定义的选择模式:

常量名 作用
MULTIPLE_INTERVAL_SELECTION 一次选择任意多行
SINGLE_INTERVAL_SELECTION 一次选择连续多行
SINGLE_SELECTION 一次选择一行

对于列选择方式,应该调用

setColumnSelectionAllowed(boolean columnSelectionAllowed) 方法,该方法默认情况下是禁用的。

下面看看具体的例子:

package cn.com;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.ButtonGroup;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;



public class TableSelectModeTest extends JFrame 
{
	private JTable table;
	private JRadioButton[] radioButtons ;	//单选框
	private JCheckBox checkBox ;			//复选框
	private ButtonGroup buttonGroup ;
	
	@SuppressWarnings("serial")
	public void init()
	{
		/*
		 * 初始化成员变量
		 */
		String[] radioButtonString =new String[] {"单行","连续多行","任意多行"};
		this.radioButtons=new JRadioButton[radioButtonString.length];
		this.buttonGroup=new ButtonGroup();
		for (int i=0; i<radioButtonString.length; i++)
		{
			this.radioButtons[i]=new JRadioButton(radioButtonString[i]);
			this.radioButtons[i].addActionListener(new ActionListener() {
				
				@Override
				public void actionPerformed(ActionEvent e) {
					do_radioButtons_actionPrformed(e,radioButtonString);
					
				}
			});
			this.buttonGroup.add(this.radioButtons[i]);
			
		}
		this.checkBox=new JCheckBox("禁用列选择");
		this.checkBox.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				do_checkBox_actionPrformed(e);
				
			}
		});

		this.table=new JTable(new DefaultTableModel() {
			@Override 
			public boolean isCellEditable(int rows,int column)
			{
				return false;
			}
		});
		this.table.setRowHeight(30);
		
		this.addWindowListener(new WindowAdapter() {
			@Override
			public void windowOpened(WindowEvent e)
			{
				do_windowOpened(e);
			}
			
		});
		
		
		
		/*
		 * 窗口面板设置
		 */
		JScrollPane  scrollPane =new JScrollPane();
		scrollPane.setViewportView(this.table);
		
		JPanel panel1=new JPanel(new GridLayout(2, 1,5,5));
		JPanel panel2=new JPanel(new FlowLayout(FlowLayout.CENTER, 7, 7));
		JPanel panel3=new JPanel();
		
		JLabel label1=new JLabel("行选择模式:");
		label1.setFont(new Font("微软雅黑",Font.PLAIN,15));
		panel2.add(label1);
		for (JRadioButton radioButton: this.radioButtons)
		{
			panel2.add(radioButton);
		}
		panel3.add(this.checkBox);
		panel1.add(panel2);
		panel1.add(panel3);
		
		this.add(scrollPane,BorderLayout.CENTER);
		this.add(panel1,BorderLayout.SOUTH);
		
		/*
		 * 设置窗口属性
		 */
		this.setTitle("设置表格的选择模式");
		this.setSize(600,300);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setLocationRelativeTo(null);
		this.setResizable(false);
		this.setVisible(true);
		
	}
	/*
	 * 单选按钮 监听函数
	 */
	protected void do_radioButtons_actionPrformed(ActionEvent e,String[] radioButtonString)
	{
		String actionString =e.getActionCommand();
		if (actionString.equals(radioButtonString[0]))
		{
			this.table.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		}
		else if (actionString.equals(radioButtonString[1]))
		{
			this.table.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
		}
		else if (actionString.equals(radioButtonString[2]))
		{
			this.table.getSelectionModel().setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
		}
	}
	protected void do_checkBox_actionPrformed(ActionEvent e)
	{
		if (this.checkBox.isSelected())
		{
			this.checkBox.setText("启用列选择");
			this.table.setColumnSelectionAllowed(true);
		}
		else
		{
			this.checkBox.setText("禁用列选择");
			this.table.setColumnSelectionAllowed(false);
		}
	}
	
	protected void do_windowOpened(WindowEvent e)
	{
		/*
		 * 初始化表格
		 */
		DefaultTableModel defaultTableModel=(DefaultTableModel) this.table.getModel();
		defaultTableModel.setColumnIdentifiers(new Object[] {"书名", "出版社", "出版时间", "丛书类别", "定价" });
		defaultTableModel.addRow(new Object[] { "Java从入门到精通(第2版)", "清华大学出版社", "2010-07-01", "软件工程师入门丛书", "59.8元" });
		defaultTableModel.addRow(new Object[] { "PHP从入门到精通(第2版)", "清华大学出版社", "2010-07-01", "软件工程师入门丛书", "69.8元" });
		defaultTableModel.addRow(new Object[] { "Visual Basic从入门到精通(第2版)", "清华大学出版社", "2010-07-01", "软件工程师入门丛书", "69.8元" });
		defaultTableModel.addRow(new Object[] { "Visual C++从入门到精通(第2版)", "清华大学出版社", "2010-07-01", "软件工程师入门丛书", "69.8元" });
		
		this.table.setModel(defaultTableModel);
		
		JTableHeader header=this.table.getTableHeader();
		header.setFont(new Font("微软雅黑",Font.PLAIN,20));
		header.setPreferredSize(new Dimension(header.getWidth(),25));
		
	}
	
	
	
	public TableSelectModeTest()
	{
		init();
	}
	
	public static void main(String args[])
	{
		TableSelectModeTest winTableSelectModeTest =new TableSelectModeTest();
	}

}

看看效果吧:
在这里插入图片描述

无名氏* 发布了30 篇原创文章 · 获赞 19 · 访问量 1179 私信 关注

标签:多行,Java,表格,java,awt,设置,swing,import,javax
来源: https://blog.csdn.net/qq_44848423/article/details/104169937

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有