将文本和图标(使用MouseListener)添加到JTable列

时间:2009-10-03 04:35:53

标签: java swing jtable tablecellrenderer

我想实现以下功能,但我很困惑,如果它可以在Java中。如果是,那怎么样?请帮忙:

我想创建一个JTable类表,其中表的第一行包含列名和每列中的一个图标,即在第一行的每个单元格中。单击该图标应该导致从表中删除该列(可能使用MouseListener ??)。

我找到了许多解决方案,我可以在JTable中为单元格添加按钮,但没有描述将文本和图标(使用MouseListener)添加到单元格。请看看你是否可以提供帮助,非常感谢你的阅读。

2 个答案:

答案 0 :(得分:3)

您可以创建扩展TableCellRenderer的自定义JLabel。可以使用图标创建此JLabelJLabel可以在文本的右侧或左侧显示图标)。你会希望getTableCellRendererComponent测试正在渲染的行是否是第一行,如果是,则设置图标,否则不要。

对于删除操作,您可以在表格上添加MouseListener,在处理mouseClicked方法时,您可以通过测试rowAtPoint找到被点击的单元格, columnAtPoint通过PointmouseEvent.getX()创建mouseEvent.getY()。如果确定单击了图标的第一行,则可以从列模型中删除该列。

如果通过第一行,您实际上是指表头,您可以为JTableHeader创建相同的渲染器,并在该组件上设置MouseListener

答案 1 :(得分:2)

好吧,我不明白你的问题。

  

我想创建一种JTable类型   表的第一行包含的表   列名和图标

你的意思是表头,就像通过显示列名和排序方向进行排序一样?

如果是,则为表头使用自定义渲染器,并向标头添加MouseListener以确定单击了哪个列。您应该能够自定义Default Table Header Renderer以执行您想要的操作。

或者你的意思是表中的第一行数据。如果是这样,那么您仍然需要使用自定义渲染器,但这次您将MouseListener添加到表而不是表头。

在这两种情况下,您都可以使用TableColumnModel.removeColumn()方法从表的视图中删除列。

相关问题