【问题标题】:How do I enable a button after the scrollbar goes to the bottom?滚动条到底部后如何启用按钮?
【发布时间】:2020-10-06 21:02:18
【问题描述】:

所以,我使用了JScrollPane,然后添加了JTextArea。我用textArea.setCaretPosition(0) 重置了滚动条,它在顶部。一切都好,直到我想在滚动条到达底部时启用禁用按钮。

我该怎么做?

【问题讨论】:

  • 一切都好,直到我想在滚动条到达底部时启用禁用按钮。 - 你为什么关心滚动条在哪里?如果滚动条向下一半并且用户决定他们想要回到顶部,你为什么要阻止它们?让用户决定何时使用该按钮,而不是您。
  • @camickr “接受”按钮通常处于禁用状态,直到滚动完整个协议条款。它们可能不被阅读,但被滚动。对于 OP,你必须获取垂直滚动条的位置,看看它是否接近最大值。
  • @GilbertLeBlanc,OP 没有在任何地方提到“接受”按钮。该按钮的功能是滚动到顶部。滚动到顶部如何确认已浏览整个协议?用户可以手动使用滚动条返回顶部。 OP需要澄清这个问题,这就是我要求更多信息的原因。我不想做任何假设。
  • 嗨,很抱歉这个迟到的答案。另外,如果您不清楚该问题,我也很抱歉,我期待在接下来的问题中更正该问题。吉尔伯特勒布朗是对的。所有这些都是关于“协议条款”的接受按钮。 @camickr 我从来没有提到按钮的功能是滚动到顶部。很抱歉缺少信息。谢谢。
  • @NewBegin, 我从来没有提到按钮的功能是滚动到顶部 - 你说“我使用 textArea.setCaretPosition(0) 重置滚动它在顶部。一切都很好,直到我想设置一个禁用的按钮“ - 如果它与问题无关,你为什么要提到它。这意味着滚动一直有效,直到您想要添加逻辑来禁用/启用按钮。此外,您已经得到了答案,所以不要忘记“接受”答案,这样人们就知道问题已经解决了。

标签: java swing jbutton jscrollpane


【解决方案1】:

您可以监听 JScrollPane 的视口的变化,并将视口可见矩形的底部与视口的视图(即 JTextArea)的高度进行比较:

JViewport viewport = scrollPane.getViewport();
viewport.addChangeListener(e -> {
    Rectangle rect = viewport.getViewRect();
    int bottom = rect.y + rect.height;
    endButton.setEnabled(bottom >= viewport.getViewSize().height);
});

【讨论】:

  • 非常感谢! :)
猜你喜欢
  • 2018-05-04
  • 2021-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多