文字区域无法使用尖号正确滚动

时间:2019-02-15 08:35:33

标签: java swing jtextarea

我使用JTextArea进行我的简单聊天程序的聊天,并且添加了插入符号,因此当文本附加到插入符号时它将自动滚动。这就产生了一个问题,即在经常使用聊天功能时,用户无法滚动。

我尝试浏览插入符号的选项,并查看了滚动窗格的选项,但是在用户滚动时没有向下滚动没有任何作用。

我打算允许用户滚动但由于有人发送消息而不能立即向下滚动。理想的情况是它像Discord一样工作,它仅在用户一直向下滚动时才向下滚动。

2 个答案:

答案 0 :(得分:2)

  

理想的是它像Discord那样工作,它仅在用户一直向下滚动或类似操作时才向下滚动。

签出Smart Scrolling。它将AdjustmentListener添加到滚动条以控制滚动:

  1. 当滚动条位于底部时,它将继续自动滚动。

  2. 当它不在底部时,它不会滚动。用户需要滚动到底部才能重新激活自动滚动。

答案 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*/
}

在下面评论任何改进或建议。