gpt4 book ai didi

java - JTable inside JLayeredPane inside JScrollPane - 你如何让它工作?

转载 作者:搜寻专家 更新时间:2023-11-01 02:53:30 25 4
gpt4 key购买 nike

我想把来自 JTable 的对象放在它上面,所以使用 JLayeredPane 似乎很自然。然而,让它正确地绘制,正确地做标题等是非常困难的。我该怎么做才能:

  • 滚动时显示行标题并匹配
  • 列标题在滚动时显示并匹配
  • 表格正确绘制
  • 调整大小不会把一切都搞砸

请注意,因为 JDesktopPane 扩展了 JLayeredPane,所以这个问题的答案还允许您在后面有一个 JTable(或任何其他组件)一个 JDesktopPane

最佳答案

相似但不相同的问题有助于: Java - Is it possible to put a JLayeredPane inside JScrollPane?How to display animation in a JTable cellSwing GUI design with JScrollPane and JLayeredPane

要正确执行此操作,需要考虑三个不同的问题:大小调整、 header 和 UI 更改。

sizing

要正确滚动和绘制,JScrollPane 需要知道其中组件的大小和首选大小,在本例中为 JLayeredPane。但是您希望由表格设置大小,因为其他 Component 将 float 在表格的顶部。在这种情况下,最简单的方法是使 JLayeredPane 将与大小相关的属性委托(delegate)给 JTable,如下所示。

final JTable table = new JTable();
JLayeredPane layers = new JLayeredPane() {
@Override
public Dimension getPreferredSize() {
return table.getPreferredSize();
}

@Override
public void setSize(int width, int height) {
super.setSize(width, height);
table.setSize(width, height);
}

@Override
public void setSize(Dimension d) {
super.setSize(d);
table.setSize(d);
}
};
// NB you must use new Integer() - the int version is a different method
layers.add(label, new Integer(JLayeredPane.PALETTE_LAYER), 0);
JScrollPane scrolling = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scrolling.setViewportView(layers);

如果您不希望 JTable 成为确定 JLayeredPane 大小的因素,则需要以其他方式确定它,这也是 table 的大小。两者都需要显式调用 setPreferredSize()setSize()

标题

由于 JTable 不再是视口(viewport),您需要自己链接标题。以下代码将起作用:

scrolling.setColumnHeaderView(table.getTableHeader());
scrolling.setRowHeaderView(rowHeader);

界面

另请注意,JTable 在 configureEnclosingScrollPane()configureEnclosingScrollPaneUI() 中做了一些讨厌的代码。如果您想让 UI 样式更改正常工作,那么您必须重写这些方法,但我还没有弄清楚如何执行此操作。

关于java - JTable inside JLayeredPane inside JScrollPane - 你如何让它工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6663591/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com