パスワードを忘れた? アカウント作成
431580 journal

nogの日記: JTextArea と JScrollBar 3

日記 by nog

jIRCのFeature Requestで、全ログ窓の自動スクロール機能の付加というリクエストが上がっている。実は、現状でもそう機能するように作っているつもりなのだが、アクティブなチャンネルでさえきちっと最後までスクロールしていない感じだ。なんとなくsetLineWrapで折り返している部分を無視している雰囲気だ。
それなりに動いていたので、気にしないようにしていたが、だんだん他の直したい所や付け加えたい機能よりも難易度が低くなってきたのでやっつけることにしてみた。
修正前は、JTextArea の appendを実行したあとで、JScrollBar のインスタンスにたいして、 scrollBar.setValue(scrollBar.getMaximum())とスクロールさせた。

public void append(String message) {
ta.append(getTime() + " " + message + CRLF);
scrollBar.setValue(scrollBar.getMaximum());
}

いろいろ試した結果、いい感じに動いたのは、チェンジリスナをJScrollBarの getModel()にたいして追加し、そのリスナでスクロールさせる方法だ。

scrollBar = scrollPane.getVerticalScrollBar();
ChangeListener l = new ChangeListener() {
public void stateChanged(ChangeEvent e) {
scrollBar.setValue(scrollBar.getMaximum());
}
};
scrollBar.getModel().addChangeListener(l);

これだときっちりスクロールする。完璧!
とおもったものの、問題が一つ。スクロールバーの内容が変わったら、最大値にセットすることを別スレッドで行っているため、バックスクロールできない。使用とした瞬間に最大値にセットするため。ダメじゃん、、、、
もう一工夫必要らしい。

しかし、ソースを日記に書くと読みにくいなぁ、、、
タグってblockquoteで良かったと思ったのに、、、

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by tt (2867) on 2002年12月10日 2時31分 (#214977) 日記
    BLOCKQUOTEはつかえるんだけど、PREがつかえないので、 空白が消えちゃうんですよね。

    はっきり言って辛い;;

    ちゅうことで、workarroundは「テキスト形式」と使うとか「全角スペース(って何よ)で字下げ」とからしい。

    前者は一切タグが使えない、後者はコピーペーストでコードをそのままはっつけられない(日記からはりつける、日記にはりつけるの両方)という欠点があります。

    他にもいい方法があったら教えてください

    --
    -- Takehiro TOMINAGA // may the source be with you!
    • by witch (3127) on 2002年12月10日 14時42分 (#215131) 日記
      「テキスト形式(HTML OK!)」で、行頭から半角スペースをいれるとインデントされるみたいです。

      でも、半角スペース1つで、半角2文字分インデントしちゃうのよね…
      親コメント
    • by nog (7146) on 2002年12月10日 22時25分 (#215308) 日記
      テキスト形式の存在を忘れてました。コードというのもあるんですね。
      ちとためしに今使ってみています ^-^;;
      {
          {
              {
                  test;
              }
          }
      }
      親コメント
typodupeerror

アレゲはアレゲ以上のなにものでもなさげ -- アレゲ研究家

読み込み中...