Java 如何在滚动条到达底部后启用按钮?

Java 如何在滚动条到达底部后启用按钮?,java,swing,jbutton,jscrollpane,Java,Swing,Jbutton,Jscrollpane,因此,我使用了一个JScrollPane,然后添加了一个JTextArea。我使用textArea.setCaretPosition(0)重置滚动条,滚动条位于顶部。一切都很好,直到当滚动条到达底部时,我想在enable上设置一个禁用按钮 如何才能做到这一点?您可以监听JScrollPane视口的更改,并将视口可见矩形的底部与视口视图的高度(即JTextArea)进行比较: 一切都很好,直到我想在滚动条到达底部时将禁用按钮设置为启用。-你为什么关心滚动条在哪里?如果滚动条向下一半,用户决定返回顶

因此,我使用了一个
JScrollPane
,然后添加了一个
JTextArea
。我使用
textArea.setCaretPosition(0)
重置滚动条,滚动条位于顶部。一切都很好,直到当滚动条到达底部时,我想在enable上设置一个禁用按钮


如何才能做到这一点?

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


一切都很好,直到我想在滚动条到达底部时将禁用按钮设置为启用。-你为什么关心滚动条在哪里?如果滚动条向下一半,用户决定返回顶部,为什么要阻止他们?让用户决定何时使用按钮,而不是你。@camickr在滚动整个协议条款之前,“接受”按钮通常是禁用的。它们可以不被读取,但可以滚动。对于OP,你必须获得垂直滚动条的位置,看看它是否接近最大值。@GilbertLeBlanc,OP在任何地方都没有提到“接受”按钮。该按钮的功能是滚动到顶部。滚动到顶部如何确认已浏览整个协议?用户可以手动使用滚动条返回顶部。OP需要澄清这个问题,这就是我要求提供更多信息的原因。我不想做假设。嗨,很抱歉这么晚才回答。另外,如果您不清楚这个问题,我也很抱歉,我将期待在接下来的问题中纠正这个问题。Gilbert Le Blanc是对的。所有这些都是关于“协议条款”的接受按钮@camickr我从来没有提到过按钮的功能是滚动到顶部。很抱歉丢失了信息。谢谢。@NewBegin,我从来没有提到按钮的功能是滚动到顶部-你说“我使用textArea.setCaretPosition(0)重置了滚动,滚动到顶部。一切都好,直到我想设置一个禁用的按钮”-如果它与问题无关,你为什么要提到它。这意味着滚动一直工作到您想要添加逻辑来禁用/启用按钮为止。另外,你已经得到了答案,所以别忘了“接受”答案,这样人们就会知道问题已经解决了。非常感谢!)
JViewport viewport = scrollPane.getViewport();
viewport.addChangeListener(e -> {
    Rectangle rect = viewport.getViewRect();
    int bottom = rect.y + rect.height;
    endButton.setEnabled(bottom >= viewport.getViewSize().height);
});