Java 可编辑JTable教程
有没有好的书籍或网站可以创建一个Java 可编辑JTable教程,java,swing,jtable,Java,Swing,Jtable,有没有好的书籍或网站可以创建一个JTable?我想使一列可编辑。实际上,我想将继承的JCheckBox组件(我们在这里创建的)放入一个表列中,而不是仅仅将表放入JCheckBox,因为它是一个可编辑的布尔字段 我有这本书,但我只是想知道是否还有其他的例子,我可以看看,并学习如何更好地处理表格。这本书似乎只是把java的“轨迹”放到了网上,并把它放到了书中 不过,我正在重新阅读这些内容,只是好奇是否有人找到了可能更有用的东西。您希望扩展以创建自己行为的类是DefaultTableModel。这将允
JTable
?我想使一列可编辑。实际上,我想将继承的JCheckBox
组件(我们在这里创建的)放入一个表列中,而不是仅仅将表放入JCheckBox
,因为它是一个可编辑的布尔
字段
我有这本书,但我只是想知道是否还有其他的例子,我可以看看,并学习如何更好地处理表格。这本书似乎只是把java的“轨迹”放到了网上,并把它放到了书中
不过,我正在重新阅读这些内容,只是好奇是否有人找到了可能更有用的东西。您希望扩展以创建自己行为的类是DefaultTableModel。这将允许你定义自己的行为。您可以找到一个不错的教程。本教程来自于,很容易理解。您引用的联机文件表示该文件已更新。您是否浏览了整个内容以寻找可能更好的信息(更新并非总是更好的信息?一些有用的类包括:
包javax.swing.table
:
TableModel
-用于TableModel
AbstractTableModel
-很好的扩展类,用于使用自定义数据结构创建自己的表
DefaultTableModel
-可以处理数组[]
和向量的默认表模型
要禁用对任何单元格的编辑,需要覆盖
isCellEditable(int行,int列)
方法要使列可编辑,必须覆盖TableModel
中的isCellEditable方法。如果您继承了AbstractTableModel
,那么创建TableModel
是相当容易的,除了最简单的JTable
s之外,我建议您使用它
但是,调整表格模型
只是您需要做的一部分。要在JTable
中实际获取自定义组件,需要设置自定义单元渲染器。要使用交互式自定义组件,需要设置自定义单元编辑器。在某些情况下,使用稍微修改过的默认类版本就足够了
编辑
如果您已经拥有一个自定义组件,那么可以使用委托轻松完成:创建一个实现TableCellEditor
的新类,并在getCellEditorComponent
方法中返回该组件的新实例。此方法的参数包括当前值、单元坐标、返回表格的链接以及是否选择单元
TableCellEditor
还有一个方法,当用户提交对单元格内容的更改(您可以在其中验证用户输入并调整模型)或取消编辑时,会调用该方法。如果您曾经以编程方式中止编辑,请确保在编辑器上调用stopEditing()
方法,否则编辑器组件将保持在屏幕上——这曾经花了我2个小时的时间进行调试
请注意,在JTable
编辑器中,只有编辑器接收事件!可以使用渲染器显示按钮。但要获得一个功能正常的按钮,您需要实现一个具有正确注册的EventListeners
的编辑器。在渲染器上注册侦听器没有任何作用
渲染器
对于您在问题中所描述的内容,实现渲染器并不是绝对必要的,但您通常最终都会这样做,即使只是为了一些小的修改。与编辑器不同,渲染器的速度至关重要。对于表中的每个单元格,渲染器的getTableCellRenderComponent
将被调用一次!渲染器返回的组件仅用于绘制单元,不用于交互,因此可以“重用”下一个单元。换句话说,您应该在渲染器中调整组件(例如,使用setText(…)
或setFont(…)
如果它是TextComponent
),您不应该实例化一个新组件——这是削弱性能的简单方法
警告
请注意,为了使渲染器和编辑器能够工作,您需要告诉JTable
何时使用特定的渲染器/编辑器。基本上有两种方法可以做到这一点。可以使用相应的JTable
方法为特定类型设置默认单元格渲染器/编辑器。为了使这种方法有效,您的TableModel
需要在getColumnClass(…)
方法中准确返回此类型!默认表模型不会为您执行此操作,它总是返回Object.class
。我敢肯定,这件事已经难倒了很多人
设置编辑器/渲染器的另一种方法是在列本身上显式设置它,即通过JTable
的getTableColumn(…)
方法获取TableColumn
。这要复杂得多,但是,这也是为单个类使用两个不同的渲染器/编辑器的唯一方法。例如,您的模型可能有两列类字符串,它们以完全不同的方式呈现,可能一次使用JLabel/DefaultRenderer
,另一次使用JButton
访问更精细的编辑器
JTable
带有自定义渲染器和编辑器,功能极其广泛,但也有很多地方需要使用,而且有很多地方需要出错。祝你好运
in是任何定制JTables的人的必读资料。特别是,读取和重新读取,因为它通常需要一段时间才能“单击”。自定义渲染器和编辑器上的示例也很有价值。如果您试图使用一个简单的JTable
,其中有一列是可编辑的,并且您知道列的位置,那么您可以始终使用默认表模型并重载isCellEditable
调用
大概是这样的:
myTable.setModel(new DefaultTableModel(){
@Override
public boolean isCellEditable(int row, int column) {
if (column == x) {
return true;
} else
return false;
}
});
对于复选框,创建渲染器类
MyCheckBoxRenderer extends JCheckBox implements TableCellRenderer
在
public ArrayList<XXXDO> tbmData = new ArrayList<XXXDO>(); //arraylist for data in table
@Override
public boolean isCellEditable(int row, int col) {
if (col == 4) {
return true;
} else {
return false;
}
}
@Override
public void setValueAt(Object value, int row, int col) {
if ((row >= 0) && (row < this.tbmData.size()) && (col >= 0) && (col < this.colNm.length)) {
if (col == 4) {
tbmData.get(row).col4= (String) value;
}
fireTableCellUpdated(row, col);
} else {
}
}