是否有任何好的书籍或网站可以创建一个JTable
?我想让一列可编辑.我想实际将一个继承的JCheckBox
组件(我们在这里创建)放到一个表列中,而不是仅仅JCheckBox
根据它是一个可编辑的boolean
字段放入表.
我有JFC Swing Tutorial第二版的书,但我想知道是否有其他的例子我可以看一下并学习如何更好地处理表格.这本书似乎只是把java的"踪迹"放在网上并把它放在书中.
我正在重新阅读这些东西,只是好奇是否有人找到了可能有助于更多的东西.
要使列可编辑,您必须覆盖中的isCellEditable
方法TableModel
.TableModel
如果你继承了AbstractTableModel
,那么创建一个相当容易,除了最简单的JTable
s之外我会推荐它.
但是,适应这TableModel
只是你需要做的事情的一部分.要实际获取自定义组件JTable
,您需要设置自定义单元格渲染器.要使用交互式自定义组件,您需要设置自定义单元格编辑器.在某些情况下,使用稍微修改过的默认类版本就足够了.
编者
如果您已经使用委托轻松完成了自定义组件:创建一个新的类实现TableCellEditor
,并在方法中返回该组件的新实例getCellEditorComponent
.该方法的参数包括当前值以及单元坐标,返回表格的链接以及是否选择单元格.
在TableCellEditor
还有一个方法中,当用户提交的改变单元格的内容(在这里可以验证用户输入和调整模型),其被称为或取消编辑.stopEditing()
如果您以编程方式中止编辑,请务必在编辑器上调用该方法,否则编辑器组件将保留在屏幕上 - 这曾经花了我2个小时进行调试.
请注意,在JTable
编辑器中,只有编辑才能收到活动!可以使用渲染器显示按钮.但是要获得一个正常运行的按钮,您需要使用正确的EventListeners
注册实现编辑器.在渲染器上注册侦听器不会执行任何操作.
渲染器
对于您在问题中描述的内容,实现渲染器并不是绝对必要的,但无论如何,如果仅进行微小修改,您通常最终会执行渲染.与编辑不同,渲染器对速度至关重要.该getTableCellRendererComponent
渲染器是为表中的每一个细胞都被调用一次!渲染器返回的组件仅用于绘制单元格,而不用于交互,因此可以"重用"下一个单元格.换句话说,你应该调整组件(例如,使用setText(...)
或者setFont(...)
如果它是一个TextComponent
)的渲染,你应该不实例化一个新的-这是削弱性能的简单方法.
注意事项
请注意,要使渲染器和编辑器工作,您需要告知JTable
何时使用某个渲染器/编辑器.基本上有两种方法可以做到这一点.您可以使用相应的方法为特定类型设置默认单元格渲染器/编辑器JTable
.为了这种方式工作,您TableModel
需要在getColumnClass(...)
方法中返回这种类型!默认表模型不会为您执行此操作,它始终返回Object.class
.我敢肯定,一个人难倒了很多人.
设置编辑器/渲染器的另一种方法是在列本身上显式设置它,即通过获取TableColumn
via的getTableColumn(...)
方法JTable
.这是更精细的,但是,它也是为单个类提供两个不同的渲染器/编辑器的唯一方法.例如,你的模型可能有两列String类,它们以完全不同的方式呈现,可能一次使用a JLabel/DefaultRenderer
而另一列使用a JButton
来访问更精细的编辑器.
JTable
它的自定义渲染器和编辑器非常通用,但它也有很多东西可以接受,并且有很多事情要做错.祝好运!
如何在Swing教程中使用表是必须阅读任何自定义JTable的人.特别是,阅读和重读概念:编辑器和渲染器,因为它通常需要一段时间才能"点击".自定义渲染器和编辑器的示例也非常值得.