首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JTable高程计算

JTable高程计算
EN

Stack Overflow用户
提问于 2015-12-07 14:31:31
回答 2查看 1.7K关注 0票数 1

溶液

jtable.getHeight不包括标头元素

jtable.getRowHeight包括保证金

该示例的实际高度为15 and,而不是14 and。

更清晰的示例

代码语言:javascript
复制
RO 16
R1 16
R2 16
HEIGHT 48
INTERCELL java.awt.Dimension[width=1,height=1]
MARGIN 1

我有3行JTable。每一行都是16 is 。每一行边距为1便士。所以我怀疑桌子的高度应该是16 +1+ 16 +1+ 16 =50 So。

但是getHeight返回48 BUT

我也做过裸照。每一行实际上都有14 row 高度。

怎么可能?

源代码

代码语言:javascript
复制
    //headers for the table
    String[] columns = new String[] {
        "Id", "Name", "Hourly Rate", "Part Time"
    };

    //actual data for the table in a 2d array
    Object[][] data = new Object[][] {
        {1, "John", 40.0, false },
        {2, "Rambo", 70.0, false },
        {3, "Zorro", 60.0, true },
    };

    //create table with data
    JTable table = new JTable(data, columns);

    //add the table to the frame
    this.add(table);

    this.setTitle("Table Example");
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);       
    this.pack();
    this.setVisible(true);
    System.out.println("RO " + table.getRowHeight(0));
    System.out.println("R1 " + table.getRowHeight(1));
    System.out.println("R2 " + table.getRowHeight(2));
    System.out.println("HEIGHT " + table.getHeight());
    System.out.println("INTERCELL " + table.getIntercellSpacing());
    System.out.println("MARGIN " + table.getRowMargin());
}

原始问题

我在滚动窗格中有一个带有jtable的简单测试框架。

表的最小高度小于实际高度。标头+行<实际大小

这是胡说八道。

代码语言:javascript
复制
  val jtable = view.tableControl
  val headerHeight = jtable.getTableHeader.getHeight
  val rowsHeight = (0 until jtable.getRowCount()).foldLeft(0) { (heightAccumulator, counter) ⇒
    println("Row " + counter + " height " + jtable.getRowHeight(counter))
    jtable.getRowHeight(counter) + heightAccumulator
  }
  val rowsMargin = jtable.getRowMargin() * (jtable.getRowCount() - 1)
  println("Actual height " + jtable.getHeight())
  println("Header height " + headerHeight)
  println("Margin height " + jtable.getRowMargin())
  println("PreferredScrollableViewportSize" + jtable.getPreferredScrollableViewportSize())
  println("Rows height " + rowsHeight)
  println("Should be at least: " + (rowsHeight + headerHeight + rowsMargin))

我得到了

代码语言:javascript
复制
Row 0 height 16
Row 1 height 16
Row 2 height 16
Row 3 height 16
Row 4 height 16
Actual height 80
Header height 19
Margin height 1
PreferredScrollableViewportSizejava.awt.Dimension[width=450,height=400]
Rows height 80
Should be at least: 103

JTable放置在框架内,没有任何滚动条。它是完全可见的,有很大的空间波纹。

多么?完全可见表的jtable.getHeight()如何返回高度小于(行* rowHeight +标头)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-07 14:44:37

您可以替换您自己的Scrollable实现以获得各种效果。特别是,重写getPreferredScrollableViewportSize()并返回行高度的适当倍数。将N设为希望滚动条出现的行数。

代码语言:javascript
复制
JTable table = new JTable(tableModel) {

    @Override
    public Dimension getPreferredScrollableViewportSize() {
        return new Dimension(SOME_WIDTH, N * table.getRowHeight());
    }
};

将表添加到滚动窗格:

代码语言:javascript
复制
JScrollPane sp = new JScrollPane(table);

将窗格添加到具有符合首选大小的布局的面板:

代码语言:javascript
复制
JPanel p = new JPanel(new GridLayout());
p.add(sp);

包含多个N行的表将显示滚动条,如这里所示。

我只想在大型项目的单元测试上下文中找到实际的表高度。

我不知道您的总高度计算是如何失败的,但是根据用户的平台、所选的外观和组件验证状态,结果将不可避免地发生变化;建议使用这里的方法是错误的。相反,尝试通过确保使用上面概述的方法可以看到一个细小的行数来满足测试需求。

票数 2
EN

Stack Overflow用户

发布于 2015-12-07 15:51:45

多么?完全可见表的jtable.getHeight()如何返回高度小于(行* rowHeight +标头)?

JTable的默认首选大小是在创建表时硬编码的,因为表通常被添加到JScrollPane的视口。正如您所看到的,首选的视口大小要大得多,因为您需要一个小表,这将占用额外的空间。

如果您有一个小表,并且希望它以最小的大小完全显示,那么您可以使用如下代码:

代码语言:javascript
复制
JTable table = new JTable(...);
table.setPreferredScrollableViewportSize(table.getPreferredSize());
JScrollPane scrollPane = new JScrollPane( table );
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34135994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档