JScrollPaneのViewPortにJTextAreaを追加したとします。
JScrollPane pane_txt = new JScrollPane();
JTextArea txt = new JTextArea();
pane_txt.setViewportView(txt);
このテキストに次々と文字列が追加された場合、作成されるScrollバーがそれについてくる(カレントな行が必ずView内に表示される)ようにするにはどうすればよいのでしょうか?
また、その逆(ついてこさせない)をするにはどうすればよいのでしょうか?
アドバイスお願いします。
No.1ベストアンサー
- 回答日時:
以下のソースの
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();
}
}
ありがとうございました。
javax.swing.JScrollBar jcrollbar =
test._pane_txt.getVerticalScrollBar();
jcrollbar.setValue(jcrollbar.getMaximum());
を一回だけでは若干ついてこないので、FOR文で3~4回まわすことで完璧についてくるようになりました。
でもやっぱり少し泥臭いのは否めませんね。。ポリシーの設定等でドンピシャなものが必ずあると思ったのですが。。。
No.2
- 回答日時:
以前に、同じようなことをした記憶がおります。
確か、JTextArea#appendではスクロールはしなかったと思います。
(デフォルト動作)
そのとき行った手は、キャレットを表示させる位置に動かして、
勝手にスクロールさせたと記憶しています。
もっと細かくスクロール制御するには、JViewportを操作すれば出来たと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/02/05 09:55
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/03 13:18
- UNIX・Linux Linuxについて質問です。 以下のhistoryの出力結果から、sedコマンドのファイル名tmp1 1 2023/02/03 20:11
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/16 14:36
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Excel(エクセル) 製品番号での整列と、検索に関して 3 2023/06/28 19:20
- PHP 文字列を段落で分ける方法を教えて下さい。 2 2023/03/09 10:03
- その他(プログラミング・Web制作) ファイル名の一部をbatで変更したい batファイルを使って、以下のようにファイル名の一部を変更した 3 2023/02/21 20:09
- Access(アクセス) エクセルのマクロについて教えてください。 2 2023/02/04 14:20
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
TextAreaでの文字の色
-
java junit list同士の比較方法
-
ArrayListの使い方について(初...
-
JavaのswingでCardLayoutの画面...
-
javaで文字数制限するには?
-
JButton-背景の透明化
-
連番をオブジェクト名の最後に...
-
JFrameとJPanelの最大化について
-
Buttonを押すと画像が表示され...
-
JDialogを閉じた時の処理
-
TABキーの検出
-
JPanelの切り替えと再描画
-
JTableの列ヘッダ
-
質問 No.321331 「ノードの削除...
-
整数を好きなだけ入力し、個数...
-
Javaでお絵描きソフトを作りた...
-
EXECLの行を削除
-
あるコンボボックスを選択する...
-
Log4jで機能毎に別ファイルへ出...
-
flush()とclose()について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
java junit list同士の比較方法
-
javaで文字数制限するには?
-
JTableの列ヘッダ
-
TextAreaでの文字の色
-
最後の行に移動するには?
-
【Swing】JPanel クラス外から...
-
4択クイズでのランダム出題の...
-
コンパイルエラー <identifier...
-
JPanelの重ね方/OverlayLayout他
-
JPanelの切り替えと再描画
-
エラーで式の開始が不正ですと...
-
JTable の 列幅を個別に設定す...
-
VB6.0でのTextboxの高さ変更
-
ボタンクリック後パネルを再描...
-
ArrayListの使い方について(初...
-
JavaでのSwingを使った簡易電卓...
-
連番をオブジェクト名の最後に...
-
あるコンボボックスを選択する...
-
Buttonを押すと画像が表示され...
-
KeyListenerの使い方について
おすすめ情報