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辅助键的帮助可以选择多个表格单元
xxxxxxxxxx
ListSelectionMode.MULTIPLE_INTERVAL_SELECTION
2、选择单个连续区域,该选项可以选择多个表格单元,但多个表格单元之间必须是连续的。通过Shift辅助键的帮助来选择连续区域
xxxxxxxxxx
ListSelectionMode.SINGLE_INTERVAL_SELECTION
3、只能选择单个表格单元
xxxxxxxxxx
ListSelectionMode.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表格调整_简洁版
xxxxxxxxxx
package 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();
}
}