【发布时间】:2009-08-15 16:39:55
【问题描述】:
我有一个 jTable 集,因此它是只读的,并且只能通过单行进行选择。
但是,当用户选择一行并绘制该行时,jTable 的列之间的垂直网格线被移除,导致单个水平颜色块,而不是每个单元格中的颜色块。
如何让选定的行显示相邻列中每个单元格之间的垂直线?
【问题讨论】:
-
这是一个图片链接,显示我的意思,缺少的行被圈起来:algaia.co.uk/grid.jpg
我有一个 jTable 集,因此它是只读的,并且只能通过单行进行选择。
但是,当用户选择一行并绘制该行时,jTable 的列之间的垂直网格线被移除,导致单个水平颜色块,而不是每个单元格中的颜色块。
如何让选定的行显示相邻列中每个单元格之间的垂直线?
【问题讨论】:
你确定myTable.setShowGrid(true), myTable.setShowVerticalLines(true) 已经被调用了吗?你的网格颜色是什么,和选择背景颜色一样吗?
更新:我使用以下简单的Jython 脚本创建了一个只读表:
from javax.swing import *
from java.awt import *
from javax.swing.table import DefaultTableModel, DefaultTableCellRenderer
class MyTableModel(DefaultTableModel):
def isCellEditable(self, row, col):
return False
class UnfocusableRenderer(DefaultTableCellRenderer):
def getTableCellRendererComponent(self, table, value, isSelected, hasFocus, row, col):
return DefaultTableCellRenderer.getTableCellRendererComponent(self, table, value, isSelected, False, row, col)
if __name__ == '__main__':
frame = JFrame("Read-only JTable")
frame.setSize(400, 150)
frame.setLayout(BorderLayout())
tableData = [
['', ''],
['', ''],
]
colNames = ('Title 1','Title 2')
dataModel = MyTableModel(tableData, colNames)
table = JTable(dataModel)
r = UnfocusableRenderer()
for colindex in (0, 1):
tc = table.columnModel.getColumn(colindex)
tc.cellRenderer = r
scrollPane = JScrollPane()
scrollPane.setPreferredSize(Dimension(370,106))
scrollPane.getViewport().setView(table)
panel = JPanel()
panel.add(scrollPane)
panel.background = Color.blue.darker()
frame.add(panel, BorderLayout.CENTER)
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE)
frame.setVisible(True)
这是我选择一行时的截图:
由于这是显示网格线,这可能与您的渲染器、颜色或资源有关吗?
【讨论】:
您是否实现了自己的单元渲染器?
如果你确定你仍然在你的
中设置了一个边框 public Component getTableCellRendererComponent(...)
方法
【讨论】: