開発覚え書き

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

JFrameのコンテントペインのサイズ設定 (1)

2006-05-31 11:50:36 | Weblog
Java で JFrame のサイズ設定には

    クラス java.awt.Component にある public void setSize(int width, int height);
    または public void setSize(Dimension d);

を使用するが、ここで設定されるサイズはタイトルバーやボーダーを含むフレーム全体の大きさになる。
JFrameでコンテントペインの大きさを設定したい場合は、

    クラス java.awt.Container にある public Insets getInsets();

で insets (java.awt.Insets クラスのインスタンス) を取得しその大きさを加える必要がある。
ただし、注意点として pack(); または setVisible(true); でフレームを表示可能にしなければ正確な insets は求められない。
※ Windows XP 上でテストしてみると、非表示状態では insets はすべて 0 で、表示状態では insets: top=30 left=4 bottom=4 right=4 となった。top が大きいのはタイトルバーのためである。

もし、非表示の状態で色々設定をやるのであれば、下のようなコードで一時的に表示状態に切り替え insets を取得する必要があるようだ。

    setVisible(true);
    Insets insets = getInsets();
    setVisible(false);
    int width = 希望する幅 + insets.left + insets.right;
    int height = 希望する高さ + insets.top + insets.bottom;
    setSize(width, height);

もう少しスマートな方法はないのだろうか? --> (2)

JSliderでのラベル設定とDictionaryクラス

2006-05-26 17:35:00 | Weblog
今回は愚痴っぽい話。

Java Swingではある範囲のパラメータの値を選択させる部品としてスクロールバー(JScrollBar)ではなく、より高機能なスライダ(JSlider)の利用が推奨されているようである。
確かにJSliderでは目盛りや数値を簡単に付けられるので便利である。
値に対するラベルを設定できるが、それを独自のものでやろうとすると、
     public void setLabelTable(Dictionary labels);
を使うことになる。
このDictionary (java.util.Dictionary) は抽象クラスで実体の取れるサブクラスは Hashtable (java.util.Hashtable) しかない。

HashtableクラスはCollections Frameworkではレガシー扱いであり、
またDictionaryクラスはドキュメントで

注: このクラスは現在使われていません。新しい実装では、このクラスを拡張しないで Map インタフェースを実装してください。

と書いてあるのだが...
Swingも面白いというか、変な作り方をしてあるもんだ。

おかしくなったパソコンからのデータ救出

2006-05-18 18:08:02 | Weblog
PCfan 2006 6/1号(Vol.255) に
「緊急時のデータ救出」
という特集が出ている。
筆者も最近、1999年購入のノートパソコンがおかしくなり
Windows 98がまともに起動できず困ったが、Knoppixを起動させSamba経由で
バックアップを取ることができた。Sambaを通してのバックアップは日本語ファイル名もほぼ問題なく有用であった。
特集でもこの方法も書かれているが、GUI環境の操作を説明している。
(筆者の環境ではメモリ64MBのマシンだったため、デフォルトのランレベル5
ではスワップばかりでとても実用に耐える状態ではなく、ランレベル3のコンソールモードでの操作となった。)
ただ、記事によると、NTFSの暗号化ファイルは復元できず、また、RAID構成の
ハードディスクは読めないとのこと。

その他、セーフモード、XPの修復セットアップ、インストールCDから起動できるバックアップソフト True Image、などの説明もある。セーフモードは Windows 95/98等だけかと勘違いしていた。Windows 2000/XPでも起動前にF8キーを押せばメニュー選択が出て使える。