通过输入行和列指定单元格,设置该指定单元格是否可编辑,渲染组件,实现效果为整列中个别单元格不可编辑,其余可编辑,渲染不同组件
4条回答 默认 最新
- z同学的编程之路 2023-03-16 10:21关注
可以通过实现JTable的TableCellRenderer和TableCellEditor接口来对指定单元格进行属性设置,包括是否可编辑、渲染组件等。
以下是一个示例代码,演示如何对指定单元格进行属性设置:
import java.awt.*; import javax.swing.*; import javax.swing.table.*; public class MyTable extends JFrame { private JTable table; public MyTable() { super("My Table"); DefaultTableModel model = new DefaultTableModel(new Object[][]{ {"1", "A", "100"}, {"2", "B", "200"}, {"3", "C", "300"} }, new String[]{"ID", "Name", "Value"}); table = new JTable(model); // 设置第2行第3列不可编辑 table.getColumnModel().getColumn(2).setCellEditor(new MyTableCellEditor()); table.getColumnModel().getColumn(2).setCellRenderer(new MyTableCellRenderer()); // 添加表格到窗口 JScrollPane scrollPane = new JScrollPane(table); getContentPane().add(scrollPane); } private class MyTableCellEditor extends AbstractCellEditor implements TableCellEditor { private JTextField textField = new JTextField(); public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { if (row == 1 && column == 2) { textField.setEditable(false); } else { textField.setEditable(true); } textField.setText(value.toString()); return textField; } public Object getCellEditorValue() { return textField.getText(); } } private class MyTableCellRenderer extends DefaultTableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { Component comp = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); if (row == 1 && column == 2) { comp.setBackground(Color.LIGHT_GRAY); } else { comp.setBackground(Color.WHITE); } return comp; } } public static void main(String[] args) { MyTable frame = new MyTable(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(300, 200); frame.setVisible(true); } }
在示例代码中,我们定义了一个表格,然后使用MyTableCellEditor和MyTableCellRenderer类分别实现了TableCellEditor和TableCellRenderer接口来对指定单元格进行属性设置。在MyTableCellEditor类中,我们实现了getTableCellEditorComponent方法来返回渲染组件,并在其中根据行和列的值设置单元格的可编辑性。在MyTableCellRenderer类中,我们实现了getTableCellRendererComponent方法来返回渲染组件,并在其中根据行和列的值设置单元格的渲染组件。
在示例代码中,我们将第2行第3列的单元格设置为不可编辑,并使用不同的颜色进行渲染。您可以根据实际需求修改示例代码来满足您的需求。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 2020长安杯与连接网探
- ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
- ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
- ¥16 mybatis的代理对象无法通过@Autowired装填
- ¥15 可见光定位matlab仿真
- ¥15 arduino 四自由度机械臂
- ¥15 wordpress 产品图片 GIF 没法显示
- ¥15 求三国群英传pl国战时间的修改方法
- ¥15 matlab代码代写,需写出详细代码,代价私
- ¥15 ROS系统搭建请教(跨境电商用途)