1

我想实现以下功能,但如果在 Java 中可行,我会感到困惑。如果是,那么如何?请帮忙:

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

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

4

2 回答 2

3

您可以创建TableCellRenderer扩展的自定义JLabel。这JLabel可以使用图标创建(JLabel可以在文本的右侧或左侧显示图标)。您将需要getTableCellRendererComponent测试正在呈现的行是否是第一行,如果是,请设置图标,否则不要。

对于删除操作,您可以MouseListener在表格上添加一个,并且在处理该方法时,您可以通过测试和创建一个从andmouseClicked来找到被点击的单元格。如果您确定第一个带有图标的行被单击,您可以从列模型中删除该列。rowAtPointcolumnAtPointPointmouseEvent.getX()mouseEvent.getY()

如果1st row,您实际上是指表头,则可以为 创建相同的渲染器JTableHeader,并MouseListener在该组件上设置 。

于 2009-10-03T04:50:44.387 回答
2

嗯,我不明白你的问题。

我想创建一个 JTable 类型的表,其中表的第一行包含列名和一个图标

您是指表格标题,就像通过显示列名和排序方向进行排序的方式一样?

如果是这样,那么您对表头使用自定义渲染器并将 MouseListener 添加到表头以确定单击了哪一列。您应该能够自定义Default Table Header Renderer以执行您想要的操作。

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

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

于 2009-10-03T04:58:10.453 回答