ナビゲーション・リンクをスキップ

パッケージ otsu.hiSwing

swing(JAVA-GUIパッケージ)のサポートクラス群.

参照先: 説明

パッケージotsu.hiSwingの説明

swing(JAVA-GUIパッケージ)のサポートクラス群.

JAVAのGUIパッケージswingは利用するには3つ大きな困難を抱えています。

hiSwingの主クラスは画面構成/レイアウトを行う

です。大文字一文字という特殊な名称を採用しているのは、画面定義を見やすくするためです。
マルチスレッド対応の値セット処理やダイアログ系の定型作業を行う

も用意されます。

 画面構造定義の構造化

画面構造をプログラム構造で表します。
例えば

という構造の画面は次のプログラムで構築/表示できます。

import otsu.hiSwing.*;
import javax.swing.*;
public class Test{
   public static void main(final String[] args_){
      SwingUtilities.invokeLater(()-<{start(args_);});
      }
   static void start(String[] args_){
      JFrame    frame=new JFrame();
      L.set(frame,"title:hiSwing基本試験","pack","visible","quit:終了しますか?",
         L.vPanel(                                        //要素を縦に並べるパネル
            L.hPanel(L.size(400,22),                      //  要素を横に並べるパネル
               L.button("ボタン-1",L.size(100,20)),       //    ボタン
               L.gap(10),                                 //    固定長の隙間
               L.textField(L.size(150,20),L.border.bevel),//    テキスト入力域
               L.gap(),                                   //    伸縮する隙間
               L.button("ボタン-2")),                     //    ボタン
            L.hPanel(                                     //  要素を横に並べるパネル
               "進捗 : ",                               //    固定文字列
               L.progressBar(),L.size(250,23)),           //    進捗バー
            L.scrollPanel(L.size(400,150),                //  スクロール領域
               L.textArea(L.bgColor(0xFFFFEE)))));        //    複数行のテキスト領域
      }
   }
// 参照:L.set(frame,...);L.vPanel();L.hPanel();L.button();L.gap(int);L.gap();
// L.progressbar();L.scrollPanel();L.textArea();L.bgColor();L.border.bevel

ボタンには通常ActionListenerが与えられ、例えばボタンイベントを拾う ActionListenerがmyListenerなら、

    L.button("ボタン-1",L.size(100,20),myListener)

といった形となります。 L.button(),L.textField()などはそれぞれJButton,JTextField等のswing部品を戻しますので、後で使うなら それぞれの型の変数に代入することができます。

構造引数に置く画面要素はswing部品(JComponent)ですので、 Lクラスで用意されていない部品(JComponent)も構造の中でnewで与えることができます。

 マルチスレッドでの値setの簡便化

swingはマルチスレッド動作を保証しておらず、swingイベントのスレッド(EDT:EventDispachThread)外 からのデータ変更アクセスは通常禁じられています。
EDT外からデータ変更アクセスを行うには、インボーク処理が必要となります。
hiSwingクラスで用意されているset系関数は必要に応じ インボーク処理を行います。

   JProgressBar pb=...;
   hiSwing.setValue(pb,5);

   JProgressBar pb=...;
   if(SwingUtilities.isEventDispatchThread()){
      pb.setValue(5);
      }
   else{
      SwingUtilities.invokeLater(new Runnable(){
         public void run(){
            pb.setValue(5);
            }
         });
      }

相当の動作をします。

Swingのスレッドポリシーまたは Swing's Threading Policy 参照(リンク切れの場合"Swingのスレッドポリシー"などで検索してください)

 定型作業の簡便化

[選択]ボタンを押すとファイル選択ダイアログが出てファイルを選択 する、ファイルをドラッグ&ドロップすることにより選択するといった 多くのプログラムで必要となる作業を「属性」として用意しました。

[選択]ボタンで、特定のTextFieldに選択ファイルのパス名を セットするには次のような構造定義を行います。

   JTextFile      tf=new JTextFile();
   L.button("選択",L.chooseFileR(frame,tf,"*.txt|*"));
     または
   L.set(new JButton("選択"),L.chooseFileR(frame,tf,"*.txt|*"));

書き出し用の選択、ディレクトリ選択なども用意されています。
要素を与えず、ActionListenerを与えると、値のセットはなく、イベント通知のみ 行います。

TextFieldにドロップ機能を付けるには次のような構造定義となります。

   L.textField(L.drop());
      または
   L.set(new JTextFile(),L.drop());

別要素からTextFieldにファイルパスを設定するには次の

   TextFile      tf=new JTextFile();
   //
   L.textArea(L.drop(tf));
     または
   L.set(new JTextArea(),L.drop(tf));

L.dropにActionListenerを指定すれば、ドロップされたパス情報を ActionEventで通知することもできます。

 その他の簡便化

確認ダイアログなど簡易手続きも用意されています。

   int result=hiSwing.confirm(frame,"読み込みますか?");// 確認ダイアログ
   if( result==hiSwing.YES ){
      String _dir =null;
      File   _file=hiSwing.chooseFileR(frame,_dir,"*.txt,*.java|*|*.bat");//ファイル選択ダイアログ
      if( _file!=null ){
         try{
            //...読み込み処理
            }
         catch(Exception _e){
            hiSwing.message(frame,"読込失敗:"+_e.getMessage());// メッセージダイアログ
            }
         }
      }

L.chooseFileR()と異なりhiSwing.chooseFileR()は呼ばれた時点でダイアログがでます。

ナビゲーション・リンクをスキップ