swing
Groovyコードを書くためのテキストエディタを速攻でつくる
groovyConsole コマンドでGroovyコードを書くためのテキストエディタが起動しますが、 あれを自分でも使えないか、という話。 実際にやってみると簡単に使うことができました。

次のような簡単なコードで groovy.ui.ConsoleTextEditor をコンポジットした MyConsoleTextEditor をつくって使います。
painter.jar 指定矩形範囲 文字列便利描画ライブラリ(Java2D)
文字を指定した範囲(矩形)に描画するライブラリ。
複数行の折り返しをサポートし、水平・垂直方向の整列指定が可能です。
- 水平方向では、右(right)・中央(center)・左(left)
- 垂直方向では、上(top)・中央(middle)・下(bottom)

このような処理は、 javax.swing.JLabel を使えば実現できます。
このライブラリの目的は、 javax.swing.JComponent の paintComponent() を使って 独自の描画を行う場合で、テキストの描画をコントロールする場合に 簡単にコーディングできるようにすることです。
Jython で javax.swing.JTree を使う
Jython ではほとんどGUIのコードを書くことはないのだが(個人的には) Jythonで処理しているデータを可視化して、あっているかどうか確認する場合には SwingによるGUIは非常に重宝する。
例: 構造化FrameMakerでDocbookから本をつくる場合で、索引ページを本文から生成する場合などに DefaultMutableTreeModel を使用している場合の可視化
JTreeをJythonから使う方法のメモ。
ボーダー(border)の自作
javax.swing.border パッケージには、 あらかじめ便利なボーダーがいろいろと揃っています。
通常は、javax.swing.BorderFactoryを通じて各種ボーダーのインスタンスを取得して使いますが。
それらSwing標準のボーダー、およびその組み合わせで間に合わない場合は、自作します。
今回は、ツールバーとメインパネルの間に引くボーダーを 実現する UnderlineBorder.java を作成しました。
Java Swingによる簡易ブラウザの作成
SwingのJEditorPaneを使って簡易ブラウザを 簡単につくることができます。
このブラウザの問題は、HTML3.2レベルしかサポートしておらず 現在のネットに普通に存在しているコンテンツを閲覧するための 十分なツールとはなり得ないことです。
WebkitがAppleからOpenSourceとして提供され、 Adobe AIRやQT4.4で利用できるようになっている のにSwingでは利用できないのは残念。
でも自作のHTMLで書いたヘルプコンテンツの表示とか、 とりあえずテキストだけ表示できればいい! といった場合には重宝します。
マウスカーソル位置の単語を自動選択してハイライトするJEditorPane その2(改良版)(swing)

前回の改良版。
前回は、ハイライトの描画をGlassPaneを使って行っていたが、 それを直接 JEditorPane に描画する方法に改良。
この方法では、 GlassPaneのことを気にしなくていい(GlassPaneはJFrameかJAppletにしかない) のが利点です。
GlassPaneは何か別の目的...たとえば、DragAndDropの描画に使っている場合
など、自由にコントロールできないときがあります。
そんな場合でも、JEditorPane 内でハイライト描画も完結して記述していれば、
問題ありません。
マウスカーソル位置の単語を自動選択してハイライトするJEditorPane
JEditorPaneは、簡易HTMLブラウザとして使うことができます。 JEditorPane上に表示されている文字列をコピーして使いたいのですが、 いちいちマウスで該当する文字列を選択させたくなかったので、 マウスを該当の単語の上に重ねるだけで、単語を選択したように 見せかける機能を GlassPaneの機能を使って実現しました。
もっと上手なヒントの表示方法...ヒント情報付きテキストフィールド(Java,Swing)
入力フォームに何を入力したらいいか例を示したい場合があります。 フォームの横に例を書く、という単純な方法もありますが、 以下のようにテキストフィールド上にヒントを書くという方法もあります。

もちろん、実際に入力するためにテキストフィールドに フォーカスを持って行ったときには、このヒントは消えます。

このようにすれば、ヒントを表示するスペースを節約できるだけでなく、 わかりやすくすることができます。
LookAndFeelを切替えるコード(Java)
たびたび使うことになるコードなので記録。
デスクトップ向けのJavaアプリケーションを書く場合、たいていは ウインドウズ上で使われることが想定されるので、 ルックアンドフィールをWindowsにしておくのがよい。
{strong:Windows}にしておくと、ファイル選択ダイアログがネイティブなウインドウズと 同じになるのがうれしいです。 Metalに設定されている(つまりデフォルトのLaF)ファイルチューザーは正直いって、 使いにくいです。
ランタイム時の画面サイズを取得する(Java Swing)
たびたび使うことになるコードなので記録。
GUIが複雑なアプリの場合、 実行環境にあわせて画面をいっぱいまで使いたい場合があります。 その場合に使うコード。
スピン展開ウィジェットの自作(Java Swing)
小さい矢印をクリックするとコンポーネントが出現する・・・ という振る舞いをするコンポーネントの自作。
めったに使わないツールバー領域を通常は隠しておいて、 必要なときに出現させて使う・・・といった用途に適している。
スピン領域が閉じている状態

スピン領域が開いている状態

プルダウンメニューつきのボタンの自作(Java Swing)
Eclipseの[Run]ボタンのようにプルダウンメニュー付きのボタンを自作してみました。
レイアウトマネージャの自作(VerticalLayout)
FlowLayoutは横にコンポーネントを配置していきますが、 これとは逆に縦に配置していくレイアウトマネージャを自作してみました。
ちなみに、 javax.swing.Box を使用して同じようなことを実現できます。 実際に縦にコンポーネントを配置したい場合、 javax.swing.Boxで済ませることができないか、先に検討した方がよいでしょう。
Java Swingによるドラッグアンドドロップ(drag-and-drop)の実装
Javaで実装する場合に限らず、 一般的にドラッグアンドドロップの処理は、 いろいろな要素(処理やメッセージの伝達)が関わってくるので わかりにくい部分があります。
ざっと思いつくままに挙げても、以下のような点に注意してコーディングする必要があります。
- ドラッグ元での処理
- ドラッグ開始時の処理
- ドロップ先での処理
- ドロップしたときの処理(ドラッグ完了したときのドラッグ元での処理)
- ドラッグ中の処理(ドロップ領域に入ったとか出たとか)
など。
しかし、ドラッグアンドドロップ中に起きる処理の流れ全体を把握して、 そのそれぞれでどのクラスが関わってくるのかを把握できれば、 Javaでの実装はかなり簡単です。
異なるJavaVM間やネイティブなプラットフォーム上のアプリケーションとの ドラッグアンドドロップに対応しているので、 これをマスターするとかなりおもしろいことができそうです。
このエントリーのコードをコンパル・実行するには、 Java SE 1.4.2 SDK が必要です。