笔记整理
1. 表头居中
要使 JTable 的表头居中,可以通过直接设置表头的样式来实现。以下是一个示例:
1.获取 JTableHeader:
- 通过 JTable 的 getTableHeader 方法获取。
2.设置表头的默认渲染器: - 创建一个 DefaultTableCellRenderer 对象。
- 设置其文本对齐方式为居中。
-将该渲染器设置为表头的默认渲染器。
//1.获取 JTableHeader
JTableHeader header = table.getTableHeader();
//2.设置表头的默认渲染器:
DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
renderer.setHorizontalAlignment(SwingConstants.CENTER);
header.setDefaultRenderer(renderer);
3.可以通过 setBackground、setForeground 和 setFont 等方法进一步设置表头的背景颜色、文本颜色和字体样式。
2.内容居中
1.在创建 JTable 时设置属性
JTable table = new JTable(data,columnNames) {
@Override
public TableCellRenderer getDefaultRenderer(Class<?> columnClass) {
DefaultTableCellRenderer renderer = (DefaultTableCellRenderer) super.getDefaultRenderer(columnClass);
renderer.setHorizontalAlignment(SwingConstants.CENTER);
return renderer;
}
};
2.通过布局管理器
将 JTable 放置在一个具有居中布局特性的容器中,比如 JPanel 使用 BorderLayout 并将 JTable 添加在中间位置。
JPanel panel = new JPanel(new BorderLayout());
panel.add(table, BorderLayout.CENTER);
3.JTable中添加图片
通过setModel重写方法来添加图片
String[] columnNames = {"序号","36"}; // 表头
Object[][] data = {
{new ImageIcon("image2.jpg"),"36"}, //new ImageIcon("这里放图片地址")
{new ImageIcon("image2.jpg"),"36"},
};
JTable table=new JTable(data,columnNames);
JScrollPane scrollPane = new JScrollPane(table);
//重写方法添加图片
table.setModel(new DefaultTableModel(data,columnNames){
@Override
public Class<?> getColumnClass(int columnIndex) {
return getValueAt(1,columnIndex).getClass();
}
});
//表格行高
table.setRowHeight(100);
4.下拉选框
首先创建了一个表格模型,然后在添加数据时,为每一行的某一列创建并添加一个下拉框。
String[] columnNames = {"序号","状态"};
Object[][] data = {
{"序号"},
{"1"},
{"2"},
{"3"},
{"4"},
{"5"},
{"6"},
{"7"},
{"8"}
};
JTable table = new JTable(data,columnNames);
//表格下拉框
DefaultTableModel model = new DefaultTableModel();
model.setDataVector(data, columnNames);
table.setModel(model);
//用Vector集合来作为下拉框的选项值,方便删除修改下拉框中选项值的内容。
Vector<String> vector = new Vector<String>();
vector.add("a");
vector.add("b");
JComboBox<String> comboBox = new JComboBox<String>(vector);
//下拉框监听
comboBox.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if(e.getStateChange() == ItemEvent.SELECTED) {
System.out.println(comboBox.getSelectedItem()); //输出选中的值
}
}
});
//表格编辑器 //getColumn(这里的数字根据你的(列数-1)来决定)
table.getColumnModel().getColumn(1).setCellEditor(new DefaultCellEditor(comboBox));
5.添加按钮
String[] columnNames = {"序号","测试","事件"}; //表头
Object[][] data = { //必须是三个,第三个可以设置为空
{"1", "1",""},
{"2", "2",""},
{"3", "3",""},
{"4", "3",""},
};
JTable table = new JTable(data, columnNames);
//添加按钮 //getColumn(这里的数字根据你的(列数-1)来决定)
table.getColumnModel().getColumn(2).setCellRenderer(new TableCellRendererButton());
table.getColumnModel().getColumn(2).setCellEditor(new TableCellEditorButton());
table.setRowSelectionAllowed(false);// 禁止表格的选择功能。不然在点击按钮时表格的整行都会被选中。
//重写按钮方法
//按钮方法
class TableCellRendererButton implements TableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
int row, int column) {
JButton button = new JButton("打开");
return button;
}
}
//按钮方法
//添加事件
class TableCellEditorButton extends DefaultCellEditor {
private JButton btn;
public TableCellEditorButton() {
super(new JTextField());
//设置点击一次就激活
this.setClickCountToStart(1);
btn = new JButton("打开");
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("按钮事件触发----"); //事件
}
});
}
@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
return btn;
}
}