0

私は jTable を読み取り専用に設定しており、選択は単一行のみで行われます。

ただし、ユーザーが行を選択して行がペイントされると、列間の jTable の垂直グリッド線が削除され、各セルの色のブロックではなく、単一の水平色のブロックが発生します。

選択した行に、隣接する列の各セル間の垂直線を表示するにはどうすればよいですか?

4

2 に答える 2

0

独自の cellrenderer を実装しましたか?

あなたがまだ境界線を設定していることを確認した場合

 public Component getTableCellRendererComponent(...)

方法

于 2009-08-17T08:56:14.560 に答える
0

が呼び出されたこと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)

これは、行を選択したときのスクリーンショットです。

代替テキスト

これはグリッド線を示しているため、レンダラー、色、またはリソースと関係があるのでしょうか?

于 2009-08-15T18:49:24.030 に答える