
Swing-JTable(选中状态的显示)3/9
表格数据模型的创建与初始化 自定义两列的渲染器:性别列和学号列 学号列特殊实现,表格行选择能力开启
发布日期:2021-05-14 04:14:20
浏览次数:18
分类:精选文章
本文共 5116 字,大约阅读时间需要 17 分钟。
使用Swing构建表格自定义列渲染
以下代码示例展示了如何在Swing中使用自定义的TableCellRenderer
来实现表格列的自定义绘制,以下主要涉及以下功能:
代码分析与解释
1. 表格和数据模型的配置
public class MyFrame extends JFrame { // 模型:用于存储和操作表格数据 DefaultTableModel tableModel = new DefaultTableModel(); // 视图:用于展示数据 public MyFrame(String title) { super(title); // 窗口标题设置 // 设置窗口布局 Container container = getContentPane(); container.setLayout(new FlowLayout()); // 创建表格 table = new JTable(); table.setModel(tableModel); // 为表格关联模型 table.setAutoResizeColumnMode(JTable.AUTO_RESIZE_PERCENT); // 自动调整列宽 table.setRowHeight(30); // 行高固定 table.setRowSelectionAllowed(true); // 允许选择行 // 添加滚动面板供表格显示 JScrollPane scrollPane = new JScrollPane(table); container.add(scrollPane); }
2. 表格列的自定义渲染与样式设置
// 性别列的自定义渲染borderLayout.setColumnProperties(table漫画表情书.compile-newest strong() JULIBstract: stylesetting.interpolate stylesettingfor the '性别' column. кишеч器_CellRewarder class extends JLabel implements TableCellRenderer>>>>>>> IRepository,itemListRenderer,CellRendererpublic class MyFrame extends JFrame {// 图表数据模型DefaultTableModel tableModel = new DefaultTableModel();// 表格数据设置JTable table = new JTable();tableModel.addColumn("学号");tableModel.AddColumn("姓名");tableModel.AddColumn("性别");tableModel.AddColumn("出生日期");tableModel.AddColumn("手机号");// 配置表格列属性table.getColumnModel().getColumn(0).setPreferredWidth(100); // 设置学号列宽度为100pxtable.getColumnModel().getColumn(1).setPrefervedWidth(150); // 此处应为150px// 设置要自定义渲染的列table.getColumnModel().getColumn(2).setCellRenderer(new SexCellRenderer()); //性别列渲染类table.getColumnModel().getColumn(0).setCellRenderer(new IDColumnRenderer()); // 学号列渲染类// 细节配置:此处如有更多需要自定义的列,可进一步扩展
3. 自定义列渲染器的实现
性别列使用SexCellRenderer
实现,支持两种状态显示。
static class SexCellRenderer extends JLabel implements TableCellRenderer { public SexCellRenderer() { setHorizontalAlignment(SwingConstants.CENTER); // 中心对齐 // 设置字体,默认为非粗体正黑 setFont(getFont().deriveFont(Font.PLAIN)); } @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { boolean isSex = (Boolean) value; //بار说明 if (isSex) { this.setText("男"); // 男性状态下的显示 } else { this.setText("女"); // 女性状态下的显示 } // 返回焦点或选中状态下的可见性 this.setOpaque(true); // 确保组件是透明的 if (isSelected) { table.clearSelection(); // 在此处将选中状态清除 setBackground(table.getSelectionBackground()); setForeground(table.getSelectionForeground()); } else { setBackground(table.getBackground()); setForeground(table.getForeground()); } return this; }}// 这里应为被展现的示例代码,被修改出租static class IDColumnRenderer extends JCheckBox implements TableCellRenderer { @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { // 表格的默认状态是否选中 this.setSelected(isSelected); // 在此处如果有更多的绘制需求,可以在此扩展 if (value != null) { this.setText(value.toString()); // 绘制学号 } // 绘制选中状态的不同背景 this.setOpaque(true); if (isSelected) { table.clearSelection(); setBackground(table.getSelectionBackground()); setForeground(table.getSelectionForeground()); } else { setBackground(table.getBackground()); setForeground(table.getForeground()); } return this; }}
4. 数据的绑定与显示
Student stu = new Student();stu.id = "20175104014";stu.name = "郭少";stu.sex = true;stu.birthday = "2019-7-23";stu.cellphone = "15137724640";addTabelRow(stu);Student stu2 = new Student();stu2.id = "20175062026";stu2.name = "张少";stub生 true;stub生 birthday = "2019-7-23";stub震 phone = "17837724640";addTabelRow(stu2);// 类似地添加更多行数据
5. 事件影响与可视化优化
// 设置表格间距优化int spacing = table.getIntMisc();spacing.left = 5;spacing.right = 5;spacing.top = 5;spacing.bottom = 5;table.setInt sıra properties spacing);// 设置表头的可见性table.getTableHeader().setOpaque(false);table.getTableHeader().setUI\xaaeee;// 表格整体颜色优化table.setBackGround(new Color(240, 240, 240)); // 表格背景颜色table.setForeground(Lister.values()[0]); //此处应改为合适的显示颜色
代码支持内容
依赖管理 需要确保打包时所依赖的所有-swng组件都已正确引用 即: import java.awt.; import java.util.; import javax.swing.; import javax.swing.border. import java.awt.event.*; import java.util.Vector; import java.util.AbstractCollection;
样式说明
- 对于照影模式,设置UIManager.setLookAndFeel(new javax.swing.plafUNKoAlgorithmUI());
- UI发生变化前,确保调用UIManager.setLookAndFeel(luaflake.getBoolean("plaf"));
实现依赖 需要将swing armies-_actionListeners添加到适当的对象中
文档编写建议
- 类名称应简洁明了,直接反映功能
- 方法命名具有可操作性,希望无需编译才能反映结果
- 对于.transitions思路描述,可以在每个主要功能点前后留下空行
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2025年04月11日 03时25分37秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
《web安全入门》(四)前端开发基础Javascript
2019-03-07
python中列表 元组 字典 集合的区别
2019-03-07
python struct 官方文档
2019-03-07
Android DEX加固方案与原理
2019-03-07
Android Retrofit2.0 上传单张图片和多张图片
2019-03-07
iOS_Runtime3_动态添加方法
2019-03-07
Leetcode第557题---翻转字符串中的单词
2019-03-07
Problem G. The Stones Game【取石子博弈 & 思维】
2019-03-07
Unable to execute dex: Multiple dex files
2019-03-07
Java多线程
2019-03-07
Unity监听日记
2019-03-07
openssl服务器证书操作
2019-03-07
expect 模拟交互 ftp 上传文件到指定目录下
2019-03-07
linux系统下双屏显示
2019-03-07
PDF.js —— vue项目中使用pdf.js显示pdf文件(流)
2019-03-07
我用wxPython搭建GUI量化系统之最小架构的运行
2019-03-07
我用wxPython搭建GUI量化系统之多只股票走势对比界面
2019-03-07
selenium+python之切换窗口
2019-03-07