2010年6月28日月曜日

Swing 文字列を傾けて描画

参考ページはここ
要は、Font自体にAffinTransformをかけてから描画すること。

2010年6月25日金曜日

Java:ui:役立ちリンク集

Java Swing Tips てんぷらメモ : Java6を標準とた1画面JWS完備のサンプル集
プログラマメモ2 :開発やIT系のメモ集、Swingのもあり
Java examples (example source code) Organized by topic :多岐にわたるサンプル集
Java Category. - java.itargs.org :Q&A集や資料類
Javaの学習ならJavaDrive :学習資料とサンプル
Swing-Threadの解説 :Sunの解説
SMG-Java トルぶるシューティング(Javaのトラブルシューティングはこちら)
Easy Learn ava: Programming Articles, Excmples and Tips :学習教材とサンプル

2010年6月22日火曜日

javax.swing Component preferredSize の罠

Swingでの部品のサイズは、sizeでも、maximumSizeでも、minimumSizeでもなく、preferredSizeが使われるため、ここを設定することが多いのだが、サイズが可変になる場合にはむしろ「null」にしておいた方が吉である。

そもそも、Swingでは、サイズはLayoutManagerの管理下にあり、上記のサイズ指定は参考値という扱いのようだ。とはいっても最大の参考値は「preferredSize」であり、初期表示はこの値が使用される。

■状況:
JPanelにBorderLayoutを設定し、NorthにJToolBarを配置、Centerにはイベントに応じて異なるJPanelが挿入され、サイズも動的に変化するという画面を開発していた。始めはJDialogを継承したクラスでうまく動作したものをJPanelに変更し、別に作成したJFrameに埋め込んで使用する形に変更したら、内部の部品変更でサイズが変わらなくなってしまった。

■調査:
最初は、pack()やvalidate(),invalidate()などの呼び方や対象が間違っているのではと、何種類もコードを追加、削除をしてみたが一向に変化がなかった。ネットや資料を見ているうちに、そういえばサイズは「preferredSize」を見ていて、これが固定値だと、、、ということでnullにしてみたらという考えに思い至った。

■判明:
nullに指定すると、見事にサイズが内部部品に応じて変化するようになった。もともとJDialogで試していた時にはgetContentPane()で取得できるContainerのpreferredSizeにはnullが入っていたいようで、内部に応じて変化する場合にはこの指定が正しいようだ。

■教訓:
前提を疑え

2010年6月10日木曜日

Mavenからアプリを実行する

以下のように記述し、exec:exec とする。

<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.1.1</version>
<executions>
<execution>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
<configuration>
<executable>java</executable>
<arguments>
<argument>-classpath</argument>
<!-- automatically creates the classpath using all project dependencies,
also adding the project build directory -->
<classpath/>
<argument>net.korabo.lib.h2ctrl.App</argument>
</arguments>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>

MavenのThreadで動作するJavaアプリの場合は、以下のように記述し、exec:java

<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.1.1</version>
<executions>
<execution>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>net.korabo.lib.h2ctrl.App</mainClass>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>

WaveMakerで3rdPartyのjarを使用する

h2databaseが使用したくて調べたら、以下のようにものを発見した。

WaveMakerでParadoxを使用する

ふむふむ、まずシステムとして認識させるには、
$WAVE_MAKER_DIR/studio/WEB-INF/lib/

にjarファイルを配置し、作成したプロジェクトで使用するには、
$PORJECT_DIR/xxProject/lib/

に配置すればいいようだ。プロジェクト側の「WEB-INF/lib」はクリーンされると消去されるので、使用できない。

なお、使用するHibernateの方言は、
org.hibernate.dialect.H2Dialect

となる。