如何设置滚动的方式,文本的某一部分是可见的JavaFX

时间:2018-01-23 20:15:29

标签: javafx

晚上好,大家好! 有一个名为TextArea的对象,我用它来显示文本,大书的大文本,使其不可编辑。如果它无法同时显示所有文本,则会获得滚动并仅显示其自身的一部分。

这就是重点,我们能否设定哪一部分文本应该显示? 只是一个kleiner暗示,我不会问更多)

P.S。另外,Fisrt,我问自己一个问题,用什么来显示所需的文字,并没有找到比TextArea更好的东西,可能是因为寻求不好。也许,你们中的某些人,亲爱的程序员,遇到了同样的问题并找到了更好的解决方案?

1 个答案:

答案 0 :(得分:0)

您不必显示所有内容,您可以显示行数(来自大字符串),并通过事件(如鼠标滚轮)将字符串的下一行按到TextArea

简单示例:

public class Controller {
public TextArea text;
int current=0;
int d=1;
int rowSize= 20;
int rowsToSee=10;
String[] strings=null;
@FXML
public void initialize() {
    String string ="";
    for(int i=0;i<3000;i++){
        string=string+" "+i;
        if(i%rowSize==0){
            string=string+"\n";
        }
    }
    strings = string.split("\n");
    final String s=string;

    text.setText(returnLines(current,current+rowsToSee,strings));
    text.setOnScroll(new EventHandler<ScrollEvent>() {
        @Override
        public void handle(ScrollEvent event) {

            if(event.getDeltaY()<0){
            text.setText(returnLines(current,current+rowsToSee,strings));
                current=current+d;
            }else {
                if(current!=0)
                {   current=current-d;
                    text.setText(returnLines(current,current+rowsToSee,strings));

                }
            }}

    });
}
String returnLines(int from,int to,String[] strArry){
    String s="";
    for(int i=from;i<to;i++){
        if(strArry.length>i){
        s=s+strArry[i]+"\n";
        }
    }
    return s;
}
}