为什么我的Java Swing JScrollPane继续滚动到顶部?

时间:2012-02-12 03:59:13

标签: java swing jscrollpane jtextarea

我正在开发一个小型计算器小部件,用于保存计算的运行日志。每次添加新条目时,都应该滚动到日志的底部。这部分似乎工作正常。 问题是,当我按下不添加到日志的计算器按钮时,日志窗格总是滚动回到顶部,滚动条消失。我怎么能阻止它这样做?

添加到日志的代码是:

    private JTextPane logArea; //This is placed inside a JScrollPane
    private void log(String m, SimpleAttributeSet a) {
       int len = logArea.getDocument().getLength();
       logArea.setEditable(true);
       logArea.setCaretPosition(len);
       logArea.setCharacterAttributes(a, false);
       logArea.replaceSelection(m);
       logArea.scrollRectToVisible(new Rectangle(0,logArea.getBounds(null).height,1,1));
       logArea.setEditable(false);
   }

似乎搞乱滚动的代码是:

  private void addDigit(char digit) {
       if (clearDisplayBeforeDigit) {
          clearNumDisplay();
       }
       if (numInDisplay.getText().length() < maxNumDigits) {
          if (digit == '.') { //Point
             if (!hasPoint) { //Only one point allowed
                hasPoint = true;
                String newText = numInDisplay.getText() + ".";
                numInDisplay.setText(newText);
             }
          } else { //New digit
             String newText = numInDisplay.getText() + digit;
             numInDisplay.setText(newText);
          }
       }
    }

1 个答案:

答案 0 :(得分:3)

您认为导致问题的代码甚至没有引用logArea,那么为什么您认为这会导致问题?

您不需要使用scrollRectToVisible(...)方法。 setCaretPosition(...)应该可以解决问题。虽然您应该获取文档的长度,并在更新文档后调用该方法。

查看Text Area Scrolling了解详情。

编辑:

我也没有看到任何改变文本区域可编辑性的理由。