gpt4 book ai didi

java - 滚动 JTable 表头

转载 作者:行者123 更新时间:2023-11-29 04:18:11 27 4
gpt4 key购买 nike

我有一个包含 60 行(固定)的 JTable。

每当事件发生时,该行内的单元格都会更新。

当 NFC Reader 在卡上写入数据时触发该事件。这种情况每 2 或 3 秒发生一次。

如果卡片写入正确或不正确,jTable 会更新结果(WRITE,ERRO)。

将JTable移动到该位置的函数只接收行号。

滚动现在移动到该行位置。

问题是:几行更新后,甚至其他行的标题出现在所选焦点行的顶部...

喜欢下面的图片。

enter image description here

这是我已经使用过的代码。他们都做同样的事情......

//First code
tblViewCsv.requestFocus();
tblViewCsv.changeSelection(rownumber, 0, false, false);

//2nd code
tblViewCsv.getSelectionModel().setSelectionInterval(rownumber, rownumber);
tblViewCsv.scrollRectToVisible(new Rectangle(tblViewCsv.getCellRect(rownumber, 0, true)));

//3rd code
JViewport viewport = (JViewport) tblViewCsv.getParent();
Rectangle rect = tblViewCsv.getCellRect(rownumber, 0, true);
Rectangle viewRect = viewport.getViewRect();
rect.setLocation(rect.x - viewRect.x, rect.y - viewRect.y);

int centerX = (viewRect.width - rect.width) / 2;
int centerY = (viewRect.height - rect.height) / 2;
if (rect.x < centerX) {
centerX = -centerX;
}
if (rect.y < centerY) {
centerY = -centerY;
}
rect.translate(centerX, centerY);
viewport.scrollRectToVisible(rect);

这是唯一滚动到所选内容的方法。

这仅接收行号指示符。

行号在所有情况下都是正确的。

 public void scrollPanel(int line) {
tblViewCsv.changeSelection(line, 0, false, false);
tblViewCsv.getSelectionModel().setSelectionInterval(line, line);
tblViewCsv.scrollRectToVisible(new Rectangle(tblViewCsv.getCellRect(line, 0, true)));
}

有什么想法吗?谢谢

最佳答案

The event is trigged when a NFC Reader writes data on a card. That happens every 2 or 3 seconds.

所以我猜这是一个在后台运行的独立线程。

所以你需要:

  1. 使用 table.scrollRectToVisible(..) 因为您想在滚动 Pane 的视口(viewport)中滚动表格。
  2. 使用 SwingUtilities.invokeLater(...) 确保代码在事件调度线程上执行。阅读 Concurrency 上的 Swing 教程有关 EDT 的更多信息。

关于java - 滚动 JTable 表头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50973260/

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