我想实现以下功能,但我很困惑,如果它可以在Java中。如果是,那怎么样?请帮忙:
我想创建一个JTable类表,其中表的第一行包含列名和每列中的一个图标,即在第一行的每个单元格中。单击该图标应该导致从表中删除该列(可能使用MouseListener ??)。
我找到了许多解决方案,我可以在JTable中为单元格添加按钮,但没有描述将文本和图标(使用MouseListener)添加到单元格。请看看你是否可以提供帮助,非常感谢你的阅读。
答案 0 :(得分:3)
您可以创建扩展TableCellRenderer
的自定义JLabel
。可以使用图标创建此JLabel
(JLabel
可以在文本的右侧或左侧显示图标)。你会希望getTableCellRendererComponent
测试正在渲染的行是否是第一行,如果是,则设置图标,否则不要。
对于删除操作,您可以在表格上添加MouseListener
,在处理mouseClicked
方法时,您可以通过测试rowAtPoint
找到被点击的单元格, columnAtPoint
通过Point
和mouseEvent.getX()
创建mouseEvent.getY()
。如果确定单击了图标的第一行,则可以从列模型中删除该列。
如果通过第一行,您实际上是指表头,您可以为JTableHeader
创建相同的渲染器,并在该组件上设置MouseListener
。
答案 1 :(得分:2)
好吧,我不明白你的问题。
我想创建一种JTable类型 表的第一行包含的表 列名和图标
你的意思是表头,就像通过显示列名和排序方向进行排序一样?
如果是,则为表头使用自定义渲染器,并向标头添加MouseListener以确定单击了哪个列。您应该能够自定义Default Table Header Renderer以执行您想要的操作。
或者你的意思是表中的第一行数据。如果是这样,那么您仍然需要使用自定义渲染器,但这次您将MouseListener添加到表而不是表头。
在这两种情况下,您都可以使用TableColumnModel.removeColumn()方法从表的视图中删除列。