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 stylesetting
    for the '性别' column.
    кишеч器_CellRewarder class extends JLabel implements TableCellRenderer
    >>>>>>> IRepository,itemListRenderer,CellRenderer
    public 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); // 设置学号列宽度为100px
    table.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思路描述,可以在每个主要功能点前后留下空行
    上一篇:Swing-JTable(增加记录)4/9
    下一篇:Swing-JTable(单元格的显示)2/9

    发表评论

    最新留言

    能坚持,总会有不一样的收获!
    [***.219.124.196]2025年04月11日 03时25分37秒