【问题标题】:Unix less-like terminal scrolling in JavaJava 中不太像 Unix 的终端滚动
【发布时间】:2011-09-08 18:43:51
【问题描述】:

默认情况下,如果输出大量文本,终端会向下滚动到最后一行,然后用户必须一直向上滚动才能从顶部阅读。我想要一种类似 Java 的方式来实现 Unix“less”程序中提供的滚动。我想要一种输出大量文本的方法,并且用户能够从顶部开始并以他们的速度向下滚动。

【问题讨论】:

  • 什么给你带来麻烦?数线?确定终端的高度?将所有输出捕获到 STDOUT 而不会丢失任何内容?识别用于滚动的光标键?
  • 我在将字符串缓存到标准输出并根据终端高度截断文本时遇到问题。我也不知道如何设置它,以便当用户按下向下箭头时,下一行应该出现,或者如果他按下向上箭头,上一行应该出现
  • 我认为这不可能。我什至不认为您可以从 Java 终端捕获按键(用于向上/向下页面或行)。你需要一个 GUI。
  • 我怀疑你能否以独立于平台的方式做到这一点。编写类似more 的程序要容易得多。
  • 一种甚至不允许你思考恶念的语言显然是一门好语言。现在没有人会认为邪恶。多么方便。

标签: java unix less-unix


【解决方案1】:

这不是一个 Less 实现,但这是一个想法:

  • 将输出分成几部分:非常长的字符串 => 短字符串数组(~10-15 行);
  • 循环,等待用户输入显示下一次迭代
String s = "blahhh foo.... I'm a very long string, with long lines and
a lot of linebreaks...";

String[] looping = s.split("\n"); // whatever delimiter you need

for(int i = 0 ; i < looping.length ; i++) {
  // print 
  System.out.print(looping[i]);

  // wait for user input
  Scanner scanner = new Scanner(System.in);
  String a =  scanner.nextLine(); 

  // assigne a key to stop the loop before the end
  if(a.equalsIgnoreCase("X") // X, or whatever you want
  break;
}

【讨论】:

    猜你喜欢
    • 2012-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-31
    • 2015-03-09
    • 2020-04-10
    • 2016-11-15
    • 1970-01-01
    相关资源
    最近更新 更多