![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
つい先日も質問させていただきましたが、また分からないことがでてきたのでお聞きします。
JPanelのなかにOverlayLayoutで2枚のJPanel(上にglassPane、下にcontentPane)を配置し、overがtrueになったらglassPaneに色を書くようにしたいと思っています。
ですが、下のcontentPane部分にボタンなどがあると、その部分にうまく色がつきません。
どうすればいいのでしょうか。よろしくお願いします。
自分で組んでみたコードを示します。
******
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Test extends JLabel{
private JPanel glassPane;
private JPanel contentPane = new JPanel();
private JButton button1 = new JButton("OverlayTest");
private boolean over = false;
public Test(){
glassPane = new JPanel(){
@Override
protected void paintComponent(final Graphics g) {
super.paintComponent(g);
if(!over)return;
Graphics2D g2 = (Graphics2D) g;
g2.setColor(new Color(Color.MAGENTA.getRed(), Color.MAGENTA.getGreen(), Color.MAGENTA.getBlue(), 150));
g2.fillRect(0, 0, this.getWidth(), this.getHeight());
}
};
button1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
setOver(!over);
glassPane.repaint();
//glassPane.revalidate();
}
});
contentPane.setLayout(new GridBagLayout());
contentPane.add(button1);
glassPane.setOpaque(false);
setLayout(new OverlayLayout(this));
add(glassPane);
add(contentPane);
}
public void setOver(boolean over){
this.over = over;
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.add(new Test());
frame.setSize(500,400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
No.1ベストアンサー
- 回答日時:
この場合は、OverlayLayoutを使わず、JFrameのsetGlassPaneにより、ホンモノのグラスペインを使ってください。
グラスペインとして使うコンポーネントを、透明にしたり色つきにしたりすればいいでしょう。この回答への補足
JFrame#setGlassPaneを使えば確かにうまくできました。
ですが、実は2枚以上色付きのコンポーネントを重ねるために、このようなコンポーネントを作りたかったのです。
このままの状態(JPanelを継承したコンポーネント上に配置して)で解決する方法はないでしょうか。
もしくは、OverlayLayoutを使って2つのコンポーネントを重ねたコンポーネントをつくり、それをGlassPaneにセットするしかないのでしょうか。
よろしくお願いします。
ずいぶん昔の質問ですが、ひょんなことから原因がわかったので、同じ問題に悩まれている方の為に一応追記しておきます。(いないかもしれませんが)
どうやらフォーカスがあるコンポーネントが最前面になるように描画されるようで、そのためにフォーカスがあったボタンに色がつかなかったようです。
グラスペインは例外的にフォーカスがあるコンポーネントよりも全面に描画されるのでグラスペインにすれば大丈夫。
というわけで解決策は、覆いたいコンポーネントでrequestFocusしれやればいいということでした。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java java final 1 2022/06/10 22:49
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- Java java 引数 戻り値のあるメソッド 3 2023/02/12 06:23
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
java junit list同士の比較方法
-
javaで文字数制限するには?
-
連番をオブジェクト名の最後に...
-
【Swing】JPanel クラス外から...
-
ボタンクリック後パネルを再描...
-
整数を好きなだけ入力し、個数...
-
VB6.0でのTextboxの高さ変更
-
JavaでのSwingを使った簡易電卓...
-
VectorクラスとRunnableインタ...
-
JavaのswingでCardLayoutの画面...
-
TextAreaでの文字の色
-
C言語のポインターに関する警告
-
ループ処理の際、最後だけ","を...
-
[JAVA]try 内の変数を外で!?
-
JSPやサーブレットでSystem.out...
-
ダブルクォーテーションのrepla...
-
C言語32bitから64bitの移行につ...
-
javaで質問です。 文字列2023/2...
-
VBAで配列の計算
-
BOOL値を逆にしたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
java junit list同士の比較方法
-
JPanelの切り替えと再描画
-
JavaでのSwingを使った簡易電卓...
-
setPrefferedSizeとsetSize
-
javaで文字数制限するには?
-
4択クイズでのランダム出題の...
-
TextAreaでの文字の色
-
最後の行に移動するには?
-
JPanelの重ね方/OverlayLayout他
-
KeyListenerの使い方について
-
【Swing】JPanel クラス外から...
-
JButton-背景の透明化
-
JDialogを閉じた時の処理
-
JTable の 列幅を個別に設定す...
-
VB6.0でのTextboxの高さ変更
-
シンボルを解決できません
-
エラーで式の開始が不正ですと...
-
ArrayListの使い方について(初...
-
’じゃんけん’をするプログラム...
-
JOptionPaneでのフォーカスのト...
おすすめ情報