简体   繁体   English

jTable选定行的网格线

[英]jTable grid lines for selected rows

I have a jTable set so that it is read only, and selection is done by single row only. 我有一个jTable设置,因此它是只读的,并且选择仅由单行完成。

However, when the user selects a row and the row is painted, the jTable's vertical grid lines between columns are removed, causing a single horizontal block of colour, instead of blocks of colour in each cell. 但是,当用户选择一行并绘制该行时,jTable的列之间的垂直网格线将被删除,从而导致单个水平颜色块,而不是每个单元格中的颜色块。

How can I get the selected row to show the vertical lines between each cell in adjacent columns? 如何获得所选行以显示相邻列中每个单元格之间的垂直线?

Have you ensured that myTable.setShowGrid(true) , myTable.setShowVerticalLines(true) have been called? 您是否已确保已myTable.setShowGrid(true)myTable.setShowVerticalLines(true) What's your grid colour, and could it be the same as the selection background colour? 您的网格颜色是什么,可以与选择背景颜色相同吗?

Update: I used the following simple Jython script to create a read-only table: 更新:我使用以下简单的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)

This is the screenshot when I select a row: 这是我选择一行时的屏幕截图:

替代文字

As this is showing the gridlines, could it be something to do with your renderers, colours or resources? 当这显示网格线时,可能与您的渲染器,颜色或资源有关吗?

Did you implement your own cellrenderer ? 您实现了自己的cellrenderer吗?

If you did make sure you still set a border in your 如果确实要确保仍在

 public Component getTableCellRendererComponent(...)

method 方法

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM