開発覚え書き

ソフトウェアシステムの開発に関わるさまざまなことの覚え書き

paintComponentsに注意

2007-06-21 13:09:42 | Weblog
間が空いてしまった。その間はJavaScriptの勉強などをしていた。
結構面白いが、注意すべき点がいくつかある。何らかのまとめは後日。

今日はJavaではまった話。人のSwingプログラムのコードで表示が変になるものがあり、結構長い時間分からなかった。

public void paintComponent(Graphics g) {

     super.paintComponents(g);

となっていたのだ。正しくは

     super.paintComponent(g);

でなければならない。
で、これがコンパイル時も実行時もエラーにはならない。
protected void paintComponent(Graphics g) は javax.swing.JComponent のメソッドだが、
public void paintComponents(Graphics g) は java.awt.Container のメソッドになる。
JComponent は Container を継承しているため、paintComponents も使えるわけである。

LinuxのJava SE 5 (1.5.0_09) で背景色が出ない (3)

2006-12-08 14:11:07 | Weblog
「LinuxのJava SE 5 (1.5.0_09) で背景色が出ない」と
「LinuxのJava SE 5 (1.5.0_09) で背景色が出ない (2)」の件。
結局、GTKLookAndFeel では JPanel のデフォルトが opaque が false に
なっているためのよう。
どうもすべてのプラットフォームで共通なデフォルト値はないらしい。
以下の方法のどれかで明示的に opaque を true にすればよい。

(A) メソッド isOpaque() をオーバーライド
JPanelを拡張したクラスで
    public boolean isOpaque() { return true; }

のようにメソッド isOpaque() をオーバーライドする。

(B) インスタンスを生成後、

    インスタンス.setOpaque(true);


のようにして設定する。

(C) 拡張クラスのコンストラクタで setOpaque(true) を呼ぶ。

LinuxのJava SE 5 (1.5.0_09) で背景色が出ない (2)

2006-12-06 17:22:17 | Weblog
「LinuxのJava SE 5 (1.5.0_09) で背景色が出ない」に書いた件だが、
試したところ、Javaの標準のLook & Feelでは正常に背景色が出るようだ。
GNOME用の GTKLookAndFeel に設定すると背景色が出なくなる。
GTKLookAndFeel のバグなのか、そういう仕様なのか。
なお、Java SE 5 のバージョンを 1.5.0_10 に上げても状況は変わらない。

LinuxのJava SE 5 (1.5.0_09) で背景色が出ない

2006-11-27 18:47:36 | Weblog
Linux (Fedora Core 6) に Sun Java SE 5 (1.5.0_09) を入れ、
GNOME上でSwingアプリケーションを動作させたところ、
JPanel拡張の独自パネルで setBackground で指定した
背景色が出ない。paintComponent をオーバーライドしているのだが、
ちゃんと super.paintComponent を呼び出しており、
Windows環境では背景色が出ている。
原因は不明。

Linux Java 1.5.0_08 Tomcat 5.5.17 でJSTL XMLタグでエラー

2006-09-04 10:40:35 | Weblog
新しいLinuxマシンに Java SE 1.5.0_08 と Tomcat 5.5.17 を入れ、
Webアプリケーションの動作テストをしたところ、JSTLのXMLタグでエラーが出る。
JSTL の XML 処理のために追加ライブラリが何か必要なのだろうか?
詳細は調べる時間がなかったため不明。
(ちなみに Tomcat 5.5 系ではデータベース等の Rsource の書き方が
変わったが、それは変更し、データベース関係は動作した。)

今回は、Java 1.4.2_12、Tomcat 5.0.28 という従来の環境をインストールし
動作させた。この環境ではJSTLのXMLタグも全く問題なく動作する。