プロが教えるわが家の防犯対策術!

JScrollPaneのViewPortにJTextAreaを追加したとします。
JScrollPane pane_txt = new JScrollPane();
JTextArea txt = new JTextArea();
pane_txt.setViewportView(txt);

このテキストに次々と文字列が追加された場合、作成されるScrollバーがそれについてくる(カレントな行が必ずView内に表示される)ようにするにはどうすればよいのでしょうか?
また、その逆(ついてこさせない)をするにはどうすればよいのでしょうか?

アドバイスお願いします。

A 回答 (2件)

以下のソースの



javax.swing.JScrollBar jcrollbar =
test._pane_txt.getVerticalScrollBar();

jcrollbar.setValue(jcrollbar.getMaximum());

部分が該当個所です。


>(カレントな行が必ずView内に表示される)ようにするにはどうすればよいのでしょうか?

boolean flag = true;

フラグをたてて実行してください。


>また、その逆(ついてこさせない)をするにはどうすればよいのでしょうか?

boolean flag = false;

フラグをたおして実行してください。
これただ、なんの対応もしないだけです。


#######################
#↓以下ソースリスト
#######################

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;


public class ScrollBarJ extends JFrame{

JScrollPane _pane_txt;
JTextArea _txt;

public static void main(String[] args){
/* 自分自身を作成 */
ScrollBarJ test = new ScrollBarJ("Swing Test");

/* 終了処理を追加 */
test.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){System.exit(0);}
});


test.setVisible(true);

boolean flag = true;
//boolean flag = false;
int i = 0;
while(true) {
try {
Thread.currentThread().sleep(1000);
} catch(InterruptedException e) {
}

test._txt.append("add[" + i++ + "]\n");


if(flag) {
javax.swing.JScrollBar jcrollbar =
test._pane_txt.getVerticalScrollBar();

jcrollbar.setValue(jcrollbar.getMaximum());
}
}
}

ScrollBarJ(String title){
setTitle(title);

this.setResizable(false);

try{
//UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
SwingUtilities.updateComponentTreeUI(this);
}catch(Exception ex){
System.out.println("Error L&F Setting");
}


JScrollPane pane_txt = new JScrollPane();
JTextArea txt = new JTextArea("", 10, 10);

_pane_txt = pane_txt;
_txt = txt;

pane_txt.setViewportView(txt);
//pane_txt.setLayout(new FlowLayout());

getContentPane().setLayout(new FlowLayout());
getContentPane().add(pane_txt);
this.pack();
}
}
    • good
    • 0
この回答へのお礼

ありがとうございました。
javax.swing.JScrollBar jcrollbar =
test._pane_txt.getVerticalScrollBar();
jcrollbar.setValue(jcrollbar.getMaximum());
を一回だけでは若干ついてこないので、FOR文で3~4回まわすことで完璧についてくるようになりました。

でもやっぱり少し泥臭いのは否めませんね。。ポリシーの設定等でドンピシャなものが必ずあると思ったのですが。。。

お礼日時:2004/08/12 02:36

以前に、同じようなことをした記憶がおります。



確か、JTextArea#appendではスクロールはしなかったと思います。
(デフォルト動作)

そのとき行った手は、キャレットを表示させる位置に動かして、
勝手にスクロールさせたと記憶しています。

もっと細かくスクロール制御するには、JViewportを操作すれば出来たと思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!