Swing

SwingのWebブラウザコンポーネントMozSwing

JavaOneのSwing for the Massesというセッション資料の中で、MozSwingというWebブラウザコンポーネントが紹介されていました。MozSwing download | SourceForge.netMozSwingはXULRunnerのラッパーで、Windows, MacOS, Linux, Solaris用のバイナリが同梱され…

Swing Application Frameworkのアクションメソッド引数

Swing Application Frameworkのアクションメソッドは引数を持たないのが普通ですが、以下の型で引数を宣言しておくと、メソッド呼び出し時にフレームワークが適切なオブジェクトを代入してくれます。 java.awt.event.ActionEvent javax.swing.Action javax.s…

SwingコンポーネントをXPathで操作する

フレームやダイアログの中から特定の条件を満たすコンポーネントを見つけたり、トラバースできると便利だと思い、JDOMをベースにして以下のプログラムを作ってみました。 SwingDOMBuilder SwingPath Swingのコンポーネント階層をDOMに変換して、XPathを使え…

Swing Application Frameworkのリソースファイルで使用可能な表現一覧

S2Swingもリリースしたことだし、Swingについてどんどん書いていこうと思います。Swing Application FrameworkにはResourceMapという機能があり、リソースをpropertiesファイルに書いておいてコンポーネントに自動インジェクションしたり、手動でルックアッ…

マウスイベントを親コントロールに透過させる

SwingコンポーネントはsetOpaque(false)で背景を透明にできますが、その場合でもマウスイベントはコントロール領域内で捕捉されます。マウスイベントも透過させたい場合は、以下のようにすれば良いようです。これを応用すれば、不定形のコントロールを作って…

Swing Application Frameworkの今後

Sunからの人材流出継続JSR-296: Swing Application FrameworkのスペックリードだったHans Muller氏が、SunからAdobeに移ってしまったそうです。ショックだなあ。ところで彼は、MLに残した『遺言』の中で、現在のSwing Application Frameworkにおける"several…

invalidate()とvalidate()とrevalidate()の違い

各メソッドの働きについて良く混乱するので、まとめます。もっとも、Swingではinvalidate()とvalidate()を直接呼ぶ局面はほとんどないと思います。 invalidate() 自分自身と、全ての親コンポーネントをinvalidにする。 このメソッドはフラグを立てるだけ。 v…

主要コンポーネントの定義済みアクション一覧

独自に定義したアクションのキーストロークがSwingコンポーネントに吸われてしまってハマることが多いので、自分のためにリストアップ。カーソル移動系の自明なアクションは省略してあります。JTableのF8とか、JSplitPaneのF6/F8辺りは盲点だと思います。 JR…

アクションの実行可否を宣言的に記述する

Swing Application Frameworkでは、メソッドに@Actionアノテーションを付けることでアクションを定義できます。さらに、@ActionにenabledPropertyパラメータやselectedPropertyパラメータを付加することで、アクションの実行可否状態や選択状態を宣言的に記…

S2Swing的なもの開発記: バリューバインディング

以下のように、アノテーションを付けたモデル側のフィールド値と、ビュー側のUIコンポーネント値を自動バインディングするようにしました。 モデル側 public class EmployeeModel { @ReadWrite @NotBlank private String name; @ReadWrite @Required @Conver…

S2Swing的なもの開発記: アクションとイベントのバインディング

以下のような仕様で、自動バインディングの仕組みを作ってみました。試した感触はなかなか悪くないです。 アクションのバインディング仕様 まず、アクションハンドラとなるメソッドを作成し、@Actionアノテーションを付けます。ここまではSwing Application …

S2Swing的なものを作りたい

Swing Application Frameworkは、リソースインジェクションや非同期タスクのサポートによって、Swingアプリケーションの開発を支援してくれます。ただし、Swing Application Frameworkの仕組み自体は非常に簡潔で、アプリケーションの「土台中の土台」の部分…

Substance L&Fを使えばJTabbedPaneに閉じるボタンを付けられる

Nimbusの登場で注目度の下がっているらしいSubstance Look & Feelですが、全体的にセンスが良いし、Office 2007風のスキンなんかもあって結構使えると思います。Substanceを使ってちょっと嬉しいのは、JTabbedPaneで「閉じる」ボタンがサポートされているこ…

GroupLayoutの記述量を削減できるBuilderを作った

J2SE 6からSwingに標準搭載されたGroupLayoutは非常に優秀なレイアウトマネージャですが、レイアウトを組み立てるコードは複雑化しやすく、可読性が高いとは言えません。IDEがコードを自動生成するだけなら問題ないですが、手書きでレイアウトコードを作成し…

Swing Application Framework続き

Swing Application Frameworkのソースは、構成がシンプル(全部で25クラス程度)なので理解しやすく、読んでいて面白い。特に、非同期処理周りは「なるほど!」と納得することだらけ。今までサーバサイドの開発パターンにばかり関心が向いていて、クライアン…

Swing Application Framework

Javaのリッチクライアントを本格的に作る必要が出てきて、SWTかSwingかで迷っていたんだけど、Java2Dや開発済みのSwingコンポーネントを使いたいという理由もあってSwingで行くことにした。SWTならぜひUrumaを試したかったんだけど、今回はSwingということで…

2次ベジェ曲線で円を近似

カスタム形状に最適化されたShapeとPathIteratorを自作することになり、参考のためにJDKのソースを眺めていたところ、Ellipse2Dが3次ベジェ曲線で近似描画されていることを知りました。半径1の円の場合、第1象限の円弧を近似する3次ベジェ曲線の制御点は、c …

JSpinnerのフォント指定

JSpinner#setFont()を実行しても、指定したフォントはエディタに反映されない。 ならばgetEditor()を呼んで spinner.getEditor().setFont(font); と書けば良いかというと、それも駄目。getEditor()の戻り値の実体はテキストフィールドを持ったパネルなので、…