SSブログ

スクロールバーの操作で悩む [oscilogi32]

(2014.07.02)
親族SNS管理人はコマンド送受のプログラムが苦手です。JAVAプログラムとPICプログラムがI2Cを介してコマンド送受する部分の開発に手間取っています。(遅々とした歩みながら)それでも”Oscilogi32”の開発は何とか進んでいます。
2014_0702.png設定コマンド
ようやくコマンド・フォーマットがまとまり、設定コマンドのリストを更新出来るようになったのですが、ここでちょっと問題が発生しました。

TextAreaの内容を書き換えると垂直スクロールバーが下に動きます。それを元に戻そうとしても上手く行きません。”更新ボタン”のActionPerformedイベントハンドラでTextAreaを書き換えるのですが、そこで垂直スクロールバーを設定しても無視されてしまうのです。orz

private void b_tourokuActionPerformed(java.awt.event.ActionEvent evt)
 {
     int index = c_type.getSelectedIndex();
     Osci_logi.settings_prefer.send_text.set(index, command_string);
     send_command.setText("");
     for (String str : Osci_logi.settings_prefer.send_text) {
            send_command.append(str+"\n");
     }
     JScrollBar vBar = jScrollPane2.getVerticalScrollBar();
     vBar.setValue( 0 );
     System.out.print("scroll_bar=" + Integer.toString(vBar.getValue() ) +"\n");
}

スクロールバーの位置をメイン・ループ内で確認すると90になっています。またメイン・ループ内でこんな処理を行うとスクロールバーの位置は変化します。
    public void scroll_up()
    {
        JScrollBar vBar = jScrollPane2.getVerticalScrollBar();
    int posi = vBar.getValue() - 5;
        if( posi < 0 )posi = 0:
        vBar.setValue(posi);
    }

何が起きているのか判らず、暫く悩みました。

到達した結論は・・・
(1)vBar.setValue関数を使ったスクロールバーの操作は正しい
(2)ActionPerformedイベントハンドラで設定したスクロールバーの位置がSwingによって再設定されている
というものです。

そこでこんな形にして
private boolean scroll_flag = false;

public void scroll_up()
{
   JScrollBar vBar = jScrollPane2.getVerticalScrollBar();
  if( scroll_flag )
  {
    vBar.setValue(0);
    scroll_flag = false;
  }
}

private void b_tourokuActionPerformed(java.awt.event.ActionEvent evt) 
{
    int index = c_type.getSelectedIndex();
    Osci_logi.settings_prefer.send_text.set(index, command_string);
    send_command.setText("");
    for (String str : Osci_logi.settings_prefer.send_text) {
        send_command.append(str+"\n");
    }
    scroll_flag = true;
}

メイン・ループ内でscroll_up関数を呼び出すことにしました。
(正しいやり方が判るまで、これで凌ぎます)

にほんブログ村 IT技術ブログへ
にほんブログ村 ネットブログ コミュニティサイトへ
にほんブログ村 IT技術ブログ オープンソースへ


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。