Почему мой Java Swing JScrollPane продолжает прокручиваться вверх? - PullRequest
2 голосов
/ 12 февраля 2012

Я разрабатываю небольшой виджет калькулятора, который ведет текущий журнал вычислений.Предполагается прокручивать до конца журнала каждый раз, когда добавляется новая запись.Эта часть, кажется, работает нормально.Проблема в том, что, когда я нажимаю кнопку калькулятора, которая не добавляется в журнал, панель журнала всегда прокручивается обратно вверх, и полоса прокрутки исчезает.Как я могу удержать его от этого?

Код, добавляемый в журнал:

    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 Ответ

3 голосов
/ 12 февраля 2012

Код, который, по вашему мнению, вызывает проблему, даже не ссылается на logArea, так почему вы думаете, что это вызывает проблему?

Вам не нужно использовать метод scrollRectToVisible (...). SetCaretPosition (...) должен сделать свое дело. Хотя вы должны получить длину документа и вызывать этот метод ПОСЛЕ того, как вы обновите документ.

Проверьте Прокрутка текстовой области для получения дополнительной информации.

Edit:

Я также не вижу причин для изменения возможности редактирования текстовой области.

...