我使用JTextArea进行我的简单聊天程序的聊天,并且添加了插入符号,因此当文本附加到插入符号时它将自动滚动。这就产生了一个问题,即在经常使用聊天功能时,用户无法滚动。
我尝试浏览插入符号的选项,并查看了滚动窗格的选项,但是在用户滚动时没有向下滚动没有任何作用。
我打算允许用户滚动但由于有人发送消息而不能立即向下滚动。理想的情况是它像Discord一样工作,它仅在用户一直向下滚动时才向下滚动。
答案 0 :(得分:2)
理想的是它像Discord那样工作,它仅在用户一直向下滚动或类似操作时才向下滚动。
签出Smart Scrolling。它将AdjustmentListener
添加到滚动条以控制滚动:
当滚动条位于底部时,它将继续自动滚动。
当它不在底部时,它不会滚动。用户需要滚动到底部才能重新激活自动滚动。
答案 1 :(得分:1)
我的建议与Camickr的建议相似。将更改侦听器添加到滚动条,并根据用户是否滚动到底部来启用/禁用插入符号移动。如果滚动条最大,请启用插入标记移动。如果不是,则将其禁用。
YourJScrollPane.getVerticalScrollBar().getModel().addChangeListener()
{
//Override stateChanged(ChangeEvent e) With Caret Movement Switch
}
通过从模型(这是BoundedRangeModel)中调用范围,值和最大范围来检测并比较当前滚动条位置。
https://docs.oracle.com/javase/7/docs/api/javax/swing/BoundedRangeModel.html
/*Where to find the needed scrollbar position values*/
YourJScrollPane.getVerticalScrollBar().getModel().getExtent()
YourJScrollPane.getVerticalScrollBar().getModel().getValue()
YourJScrollPane.getVerticalScrollBar().getModel().getMaximum() //Bottom Position
/*Pseudocode*/
if (Value + Extent == Maximum)
{
/*Enable Caret Movement - User is at bottom of page*/
}
else
{
/*Disable Caret Movement - User is not at bottom of page*/
}
在下面评论任何改进或建议。