【问题标题】:JTable showing and updating line numbers in ViewJTable 在视图中显示和更新行号
【发布时间】:2014-10-07 06:15:53
【问题描述】:

我在“JScroll”窗格中添加了一个“JTable”。我想在不更改“JTable”模型的情况下显示“JTable”中每一行的行号。

以下链接是一个很好的解决方案,可以解决我的行号问题。 LineNumber Solution 然而,行号列被添加到整个滚动窗格高度。即使 JTable 没有行,或者只有 1 行,这个额外的空白灰色列会显示滚动窗格的整个高度。我尝试更改 ScrollPane 高度、表格高度所有内容。似乎没有什么可以使行号列与当前表格行一样高。

您能否建议根据表格行设置此行号列高度并根据添加或删除的新行增加/减少高度?

【问题讨论】:

  • 修改代码听听Table有多少项,然后只画那么多灰线区域?这可能吗?
  • @NESPowerGlove 是的,我试图从模型中获取行号。然后将高度设置为该尺寸。但它不知何故不起作用。我通过使用以下得到了高度: Rectangle tblRect = table.getCellRect(table.getModel().getRowCount()-1, 0, false); //获取表格尺寸
  • 好吧,我没有看太多该网站上的代码,但我想它是从 1 循环到 n 来创建这些行号,所以没有地方可以停下来循环不是在 n 处,而是在表中的项目数处?
  • 它确实循环遍历 table.getRowCount() 项目数,以添加正确的行号。问题不在于行号,因为它们仅在预期的表行数之前生成。但问题是即使表有 0 行,也会添加 lineNumber 列(只是空白列)。并且为看起来很糟糕的 JScrollPane 的整个高度添加了行号列。 (如果我有更高的声誉,我会发布一个屏幕截图。)我只想绘制行 Number Column 直到表格高度,而不是整个 ViewPort 大小。

标签: java swing jtable jscrollpane


【解决方案1】:

我能够解决这个问题。发布修复以防其他人将来受益。

我必须先将整个 scrollPane 高度的 lineNumber 列涂成白色。然后我得到了表格的最后一行及其矩形位置,并用背景颜色绘制了 lineNumber 列,直到矩形的高度。下面是我添加到 LineNumberTableRowHeader 类的额外代码。

        Rectangle tblRect = table.getCellRect(table.getModel().getRowCount()-1, 0, false); //Getting table dimensions
    super.paintComponent(g);

    g.setColor(Color.WHITE);
    g.fillRect(0, 0, getWidth(), getHeight());

    g.setColor(getBackground());
    g.fillRect(0, 0, getWidth(), tblRect.height+ tblRect.y);

【讨论】:

    【解决方案2】:

    Row Number Table 的行标题基于 JTable 中的行数。

    【讨论】:

    • 我试过这门课。但是存在一些问题,因为它不会在第 2 行之后生成或更新行号。
    • @TinyStrides,它对我来说很好用,否则我不会花时间在论坛上发布代码。发布您的 SSCCE 来证明问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多