スクロールバーの操作で悩む [oscilogi32]
(2014.07.02)
親族SNS管理人はコマンド送受のプログラムが苦手です。JAVAプログラムとPICプログラムがI2Cを介してコマンド送受する部分の開発に手間取っています。(遅々とした歩みながら)それでも”Oscilogi32”の開発は何とか進んでいます。
設定コマンド
ようやくコマンド・フォーマットがまとまり、設定コマンドのリストを更新出来るようになったのですが、ここでちょっと問題が発生しました。
TextAreaの内容を書き換えると垂直スクロールバーが下に動きます。それを元に戻そうとしても上手く行きません。”更新ボタン”のActionPerformedイベントハンドラでTextAreaを書き換えるのですが、そこで垂直スクロールバーを設定しても無視されてしまうのです。orz
スクロールバーの位置をメイン・ループ内で確認すると90になっています。またメイン・ループ内でこんな処理を行うとスクロールバーの位置は変化します。
何が起きているのか判らず、暫く悩みました。
到達した結論は・・・
(1)vBar.setValue関数を使ったスクロールバーの操作は正しい
(2)ActionPerformedイベントハンドラで設定したスクロールバーの位置がSwingによって再設定されている
というものです。
そこでこんな形にして
メイン・ループ内でscroll_up関数を呼び出すことにしました。
(正しいやり方が判るまで、これで凌ぎます)
親族SNS管理人はコマンド送受のプログラムが苦手です。JAVAプログラムとPICプログラムがI2Cを介してコマンド送受する部分の開発に手間取っています。(遅々とした歩みながら)それでも”Oscilogi32”の開発は何とか進んでいます。
設定コマンド
ようやくコマンド・フォーマットがまとまり、設定コマンドのリストを更新出来るようになったのですが、ここでちょっと問題が発生しました。
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関数を呼び出すことにしました。
(正しいやり方が判るまで、これで凌ぎます)
|
|
|
コメント 0