swing的JTable表格调整
【JTable调整列宽】。JTable提供了一个setAutoResizeMode(int mode)方法用来调整表格的格式,该方法可以接收下面几个值:
1、JTable.AUTO_RESIZE_OFF: 关闭表格的自动调整功能。当调整某一列的宽度时,其他列的宽度不会发生变化 2、JTable.AUTO_RESIZE_NEXT_COLUMN:只调整下一列的宽度,其他列及表格的宽度不会发生改变 3、JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS:平均调整当前列后面所有列的宽度,当前列的前面所有列及表格的宽度都不会发生变化,这是默认的调整方式 4、JTable.AUTO_RESIZE_LAST_COLUMN:只调整最后一列的宽度,其他列及表格的宽度不会发生变化 5、JTable.AUTO_RESIZE_ALL_COLUMNS:平均调整表格中所有列的宽度,表格的宽度不会发生改变
如果需要精确控制每一列的宽度,则可通过TableColumn对象来实现。 JTable使用TableColumn来表示表格中的每一列,JTable中表格列的所有属性,如最佳宽度、是否可调整宽度、最小和最大宽度等都保存在该TableColumn中。此外,TableColumn还允许为该列指定特定的单元格绘制器和单元格编辑器(这些内容将在后面讲解)。TableColumn具有如下方法:
1、setMaxWidth(int maxWidth):设置该列的最大宽度。如果指定的maxWidth小于该列的最小宽度,则maxWidth被设置成最小宽度 2、setMinWidth(int minWidth):设置该列的最小宽度 3、setPreferredWidth(int preferredWidth):设置该列的最佳宽度 4、setResizable(boolean isResizable):设置是否可以调整该列的宽度 5、sizeWidthToFit():调整该列的宽度,以适合其标题单元格的宽度
【JTable调整选择模式】
选则行:JTable默认的选择方式就是选择行,也可以调用setRowSelectionAllowed(boolean rowSelectionAllowed)来修改
选择列:调用 setColumnSelectionAllowed(boolean columnSelectionAllowed)方法,修改当前JTable的选择模式为列
选择单元格:setCellSelectionEnabled(boolean cellSelectionEnabled),修改当前JTable的选择模式为单元格
【JTable调整表格选择状态】
与JList、JTree类似的是,JTable使用了一个ListSelectionModel表示该表格的选择状态,程序可以通过ListSelectionModel来控制JTable的选择模式。JTable的选择模式有如下三种:
1、没有任何限制,可以选择表格中任何表格单元,这是默认的选择模式。通过Shi负和Ctrl辅助键的帮助可以选择多个表格单元
xxxxxxxxxxListSelectionMode.MULTIPLE_INTERVAL_SELECTION2、选择单个连续区域,该选项可以选择多个表格单元,但多个表格单元之间必须是连续的。通过Shift辅助键的帮助来选择连续区域
xxxxxxxxxxListSelectionMode.SINGLE_INTERVAL_SELECTION3、只能选择单个表格单元
xxxxxxxxxxListSelectionMode.SINGLE_SELECTION
swing的JTable表格调整_的练习
x
package ch30;
import javax.swing.*;import javax.swing.table.TableColumn;
public class a_32_0swing_表格_JTable调整 {
//声明一个窗口 JFrame jf = new JFrame("调整表格宽度"); JMenuBar menuBar = new JMenuBar(); JMenu adjustModeMenu = new JMenu("调整方式"); JMenu selectUnitMenu = new JMenu("选择单元"); JMenu selectModeMenu = new JMenu("选择方式"); //定义5个单选框按钮,用以控制表格的宽度调整方式 JRadioButtonMenuItem[] adjustModeItem = new JRadioButtonMenuItem[5]; //定义3个单选框按钮, //用以控制表格的选择方式 JRadioButtonMenuItem[] selectModeItem = new JRadioButtonMenuItem[3]; //定义复选菜单项,控制选择单元 JCheckBoxMenuItem rowsItem = new JCheckBoxMenuItem("选择行"); JCheckBoxMenuItem columnItem = new JCheckBoxMenuItem("选择列"); JCheckBoxMenuItem cellItem = new JCheckBoxMenuItem("选择单元格"); //定义按钮组,实现单选 ButtonGroup adjustBg = new ButtonGroup();
ButtonGroup selectBg = new ButtonGroup(); //定义一个int类型的数组,用于保存表格所有的宽度调整方式 int[] adjustModes = {JTable.AUTO_RESIZE_OFF, JTable.AUTO_RESIZE_NEXT_COLUMN, JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS, JTable.AUTO_RESIZE_LAST_COLUMN, JTable.AUTO_RESIZE_ALL_COLUMNS}; //定义一个int乐行数组,用于保存表格所有的选择方式 int[] selectModes = {ListSelectionModel.MULTIPLE_INTERVAL_SELECTION, ListSelectionModel.SINGLE_INTERVAL_SELECTION, ListSelectionModel.SINGLE_SELECTION}; //声明JTable JTable table;
//定义一个一维数组,作为列标题 Object[] titles = {"姓名", "年龄", "性别"};
//定义一个二维数组,作为表格行数据 Object[][] data = { new Object[]{"张三", 18, "男"}, new Object[]{"李四", 17, "男"}, new Object[]{"小华", 19, "女"}, new Object[]{"小红", 16, "女"}, new Object[]{"王五", 15, "男"}, };
public void init() { table = new JTable(data, titles); //表格调整方式的菜单 adjustModeItem[0] = new JRadioButtonMenuItem("只调整表格"); adjustModeItem[1] = new JRadioButtonMenuItem("只调整下一列"); adjustModeItem[2] = new JRadioButtonMenuItem("平均调整余下列"); adjustModeItem[3] = new JRadioButtonMenuItem("只调整最后一列"); adjustModeItem[4] = new JRadioButtonMenuItem("平均调整所有列"); menuBar.add(adjustModeMenu); for (int i = 0; i < adjustModeItem.length; i++) { //默认选中第1个菜单项,即对应表格默认的宽度调整方式 if (i == 0) { adjustModeItem[i].setSelected(true); } adjustBg.add(adjustModeItem[i]); adjustModeMenu.add(adjustModeItem[i]); //为菜单项设置事件监听器 int index = i; adjustModeItem[i].addActionListener(e -> { if (adjustModeItem[index].isSelected()) { table.setAutoResizeMode(adjustModes[index]); } }); } //为窗口安装设置表格选择方式的菜单 selectModeItem[0] = new JRadioButtonMenuItem("无限制"); selectModeItem[1] = new JRadioButtonMenuItem("单独的连续区"); selectModeItem[2] = new JRadioButtonMenuItem("单选"); menuBar.add(selectModeMenu); for (int i = 0; i < selectModeItem.length; i++) { //默认选中第一个菜单项,即表格的默认选择方式 if (i == 0) { selectModeItem[i].setSelected(true); } selectBg.add(selectModeItem[i]); selectModeMenu.add(selectModeItem[i]); int index = i; selectModeItem[i].addActionListener(e -> { if (selectModeItem[index].isSelected()) { table.getSelectionModel().setSelectionMode(selectModes[index]); } }); } //为窗口添加选择单元菜单 menuBar.add(selectUnitMenu); rowsItem.setSelected(table.getRowSelectionAllowed()); columnItem.setSelected(table.getColumnSelectionAllowed()); cellItem.setSelected(table.getCellSelectionEnabled()); rowsItem.addActionListener(e -> { //清除表格的选中状态 table.clearSelection(); //如果该菜单项处于选中状态,设置表格的选择单元是行 table.setRowSelectionAllowed(rowsItem.isSelected()); //如果选择行、选择列同时被选中,其实质是选择单元格 table.setCellSelectionEnabled(table.getCellSelectionEnabled()); }); selectUnitMenu.add(rowsItem); columnItem.addActionListener(e -> { //清除表格的选中状态 table.clearSelection(); //如果该菜单项处于选中状态,设置表格的选择单元是列 table.setColumnSelectionAllowed(columnItem.isSelected()); //如果选择行、选择列同时被选中,其实质是选择单元格 table.setCellSelectionEnabled(table.getCellSelectionEnabled()); }); selectUnitMenu.add(columnItem); cellItem.addActionListener(e -> { //清除表格的选中状态 table.clearSelection(); //如果该菜单项处于选中状态,设置表格的选择单元是单元格 table.setCellSelectionEnabled(cellItem.isSelected()); //该选项的改变会同时影响选择行、选择列两个菜单 table.setRowSelectionAllowed(table.getRowSelectionAllowed()); table.setColumnSelectionAllowed(table.getColumnSelectionAllowed()); }); selectUnitMenu.add(cellItem); jf.setJMenuBar(menuBar); //分别获取表格的三个表格列,并设置三列的最小宽、最佳宽度和最大宽度 TableColumn nameColumn = table.getColumn(titles[0]); nameColumn.setMinWidth(40); TableColumn ageColumn = table.getColumn(titles[1]); ageColumn.setPreferredWidth(50); TableColumn genderColumn = table.getColumn(titles[2]); genderColumn.setMaxWidth(50); jf.add(new JScrollPane(table)); jf.pack(); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setVisible(true); }
public static void main(String[] args) { new a_32_0swing_表格_JTable调整().init(); }
}
swing的JTable表格调整_简洁版
xxxxxxxxxxpackage ch30;
import javax.swing.*;import javax.swing.table.TableColumn;
public class a_32_1swing_表格_JTable调整简洁版 {
JFrame jf = new JFrame("调整表格");
//定义一个一维数组,作为列标题 Object[] titles = {"姓名", "年龄", "性别"};
//定义一个二维数组,作为表格行数据 Object[][] data = { new Object[]{"张三", 18, "男"}, new Object[]{"李四", 17, "男"}, new Object[]{"小华", 19, "女"}, new Object[]{"小红", 16, "女"}, new Object[]{"王五", 15, "男"}, };
//组装视图 public void init(){ //创建JTable对象 JTable table = new JTable(data,titles);
//设置选择模式,下面三种只使用其中一种,剩下的都注释 //第一种: 默认,即没有限制 //table.getSelectionModel().setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); //第二种: 按住Ctrl,只能选择单个连续范围的行 //table.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION); //第三种: 按住Ctrl,只能选择单行 table.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
//设置列宽,第一列的 TableColumn column_1 = table.getColumn(titles[0]); column_1.setMinWidth(40);//即第一列的姓名列的最小宽度是40px
//设置列宽,第三列的 TableColumn column_3 = table.getColumn(titles[2]); column_3.setMaxWidth(50);//即第三列的性别列的最大宽度是50px
jf.add(new JScrollPane(table));
jf.pack(); jf.setVisible(true); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) { new a_32_1swing_表格_JTable调整简洁版().init(); }
}