Javaのダイアログの背景色の変え方を教えてください。
今、課題を作成中なのですが、ダイアログパネルを出すとパネルの背景色が「ライトグレー」になります。その色が他のパネルの色と合わないので、変更したいと思い、setBackgroudなどで設定変更したのですが、色の変化がありません。SUNのAPIを見ると変更できそうなのですが、できませんでした。
変更の仕方をご存知でしたら、教えてください。
ソース1
private void Dialog_process(String msg) {
JOptionPane pane = new JOptionPane();
JOptionPane.showMessageDialog(this,msg,"",JOptionPane.WARNING);
pane.setForegroung(Color.red);
pane.setBackground(Color.white);
}
ソース1の結果は
ダイアログのパネル背景色は「ライトグレー」、文字色は「黒」です。
ソース2
private void Dialog_process(String msg) {
JOptionPane pane = new JOptionPane(msg,JOptionPane.WARNING_MESSAGE);
JDialog pane_dialog = pane.createDialog(this,"");
pane.setForegroung(Color.red);
pane.setBackground(Color.white);
pane_dialog.show();
}
ソース2の結果は
ダイアログのパネル背景色の外は「白」、中は「ライトグレー」、文字色は「黒」です。
望む結果はパネル背景色が「白」、文字色は「赤」です。
制限事項はありません。もともと「JOptionPaneではパネル背景色が変えられないのでは」の疑問もあります。
お願いします。(^^
No.1ベストアンサー
- 回答日時:
APIドキュメントに書いてあるように、JOptionPaneは標準のダイアログを簡単に表示するためのものなので、カスタマイズしたダイアログを表示したい場合には、自前でコンポーネントを組み立てるのが良いと思います。
また、コンポーネントの色など見た目の設定については本来、独自のLookAndFeelを記述するのがスマートなやり方ですね。いちいちsetXXXColorでやっていると、全コンポーネントの色を変えようと思ったときに大変なことになります。
JOptionPaneで色を変えることができないわけではありません。
yojisktさんのプログラムでうまくいかなかったのは、Container(JOptionPaneはContainerの派生クラス)の中に含まれるComponentの色を変更していなかったからです。
以下のサンプルプログラムでは、内部に含まれるコンポーネントの色を再帰的にムリヤリ設定するようにしています。
実際にはこんなことをすべきでないと思いますが、何かの参考にしてもらえれば幸いです。
public static void main(String[] args) {
JOptionPane pane = new JOptionPane("ほげほげ", JOptionPane.WARNING_MESSAGE);
JDialog dialog = pane.createDialog(null, "タイトル");
setComponentColorRecursively(dialog, Color.red, Color.white);
dialog.show();
}
static void setComponentColorRecursively(Component c, Color fore, Color back) {
if (c instanceof Container) {
Component[] components = ((Container)c).getComponents();
for (int i = 0; i < components.length; i++) {
setComponentColorRecursively(components[i], fore, back);
}
}
c.setForeground(fore);
c.setBackground(back);
}
ありがとうございました。(^^
正しく動作しました。これで、中途半端でなく、希望する形に出来上がりました。
大変申し訳ないのですが、ソースの解説をお願いします。
粗方はわかるのですが、もう一歩入って、教えて頂きたいのです。
手が空いたときでも結構ですので、よろしくお願いします。
(_ _)<<
質問)
1、Component[] components = ((Container)c).getComponents();
本記述はパネルが複数個存在することを考慮して、記述していると思います。そのパネルはどことどこのパネルを指しますか。
今、作成しているプログラムはJFrameからJOptionPaneを表示させる形です。
Components[]とforの間にcomponents.lengthの値を印字命令を入れて印字すると「1,2,0,1,1,2,2,2,0,1,0,0,1,0」の値になりました。
例えば、1枚目はJFrame、2枚目はJOptionPane指しますとか
2、1の続きでcomponents.lengthの値が変化するのは何故ですか
No.2
- 回答日時:
再び失礼します。
mainの方で
dialog.list();
とやってみましょう。ダイアログを構成するコンポーネントの階層構造がコンソールに出力されます。けっこう深い入れ子構造になっているのが分かると思います。(すごく見にくいけど(^^;
サンプルプログラムのcomponents.lengthは、それぞれの階層における子コンポーネントの数を意味します。
ただ、JOptionPaneがどのようなコンポーネントによって構成されているかを意識することには、あまり意味がありません。
JOptionPaneはダイアログを勝手に作ってくれるだけであって、そのコンポーネント構成についてはAPIに定められていないからです。Javaのバージョンが異なれば、ぜんぜん違う構成をしているかも知れないのです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) マクロ実行時、自動で背景色を変えたい。 C列にあるチェックボックスをチェックするとB列に「TRUE」 4 2022/11/08 11:14
- Excel(エクセル) こんなことできますか?例えば、sheetに貼り付けた図形のタイトルを、セルA1の文字で表示する。 5 2022/04/22 15:25
- Photoshop(フォトショップ) MacでPhotoshopに使い方 教えて! 2 2023/07/08 08:24
- Windows 95・98 タスクバーの背景の色だけを変えたい。 2 2022/07/13 14:44
- Visual Basic(VBA) エクセルから、パワーポイントのスライドを複数作成する。 1 2022/07/08 09:40
- Access(アクセス) ACCESS2019 ナビゲーションウィンドウの色 1 2022/05/10 17:15
- Visual Basic(VBA) 昨日、質問した件『VBA にて、条件付き書式で背景色を設定しているセルの範囲で、背景色付きのセルをカ 4 2022/04/07 14:39
- Visual Basic(VBA) エクセルVBA ダブルクリックしたら色反転を指定したセルのみにしたい 2 2022/04/06 12:52
- ノートパソコン AMDディスプレイ設定 暖色見にくい 2 2023/07/18 17:24
- HTML・CSS HTML <input type=password>の黒丸の色を変える方法 3 2022/11/23 13:56
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB.NETでフォーム上にExcelのよ...
-
tableView reloadDataが出来ない
-
アクティブなTextFiel...
-
VB6で.NET frameworkの機能は使...
-
Visual Basic 2010を使ってRS-2...
-
[delphi] 変数を利用してコンポ...
-
panelコンポーネントの動作につ...
-
フレーム上のコンポーネントの...
-
Delphi 6 Personal のチュート...
-
Component上で説明文を表示させ...
-
C++ Builder でVisibleとshow
-
VB.NETでMSComm が追加できず?
-
coda-sliderというjavascriptを...
-
エクセルVBAで、条件に一致する...
-
0 == False はいいけど
-
インスタンス参照でアクセスで...
-
「タイプ初期化子が例外をスロ...
-
アルキメデスの大戦の櫂はなぜ2...
-
変数名の付け方
-
下記のリストならno002が含まれ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.NETでフォーム上にExcelのよ...
-
VB.NETでMSComm が追加できず?
-
VB6のツールボックスへのコンポ...
-
Visual Basic 2010を使ってRS-2...
-
ファイル保存先のダイアログが...
-
requestFocusについて
-
JButton配列でのイベント処理
-
C#で設定時刻到来時にイベント...
-
パネルのフォーカス移動
-
ツールボックスのような折りたたみ
-
JScrollPane上のJTableの再描画
-
VBSでCDトレイのオープン/ク...
-
C++Builder でPanel上にフォー...
-
Delphiでの画像の表示について...
-
文字の色の変更
-
ダイアログでタイトルバーを非表示
-
Unity、コントローラーによるボ...
-
画像を一瞬だけ表示する。
-
[delphi] 変数を利用してコンポ...
-
VBでCPUの使用率を取得できます...
おすすめ情報