JPanelでのコンポーネントの表示について混乱しています。
次のように、0.8fの半透明度を持つカスタムJPanelを作成するとします:-
JPanel panel=new JPanel(){
@Override
public void paint(Graphics g)
{
super.paint(g);
BufferedImage img=(BufferedImage)createImage(getWidth(),getHeight());
Graphics2D g2=(Graphics2D) g.create();
g2.setComposite(AlphaComposite.SrcOver.derive(0.8f));
g2.drawImage(img,0,0,null);
}
@Override
public Dimension getPreferredSize()
{
return new Dimension(300,300);
}
};
これをフレームのcontentPaneとして設定します。
frame.setContentPane(panel);
今、私はそれにいくつかのボタンを追加します。
frame.add(new JButton("Click Here"));
frame.add(new JButton("Click Here"));
frame.add(new JButton("Click Here"));
frame.add(new JButton("Click Here"));
1)次に、出力で半透明のボタンが表示されるのはなぜですか?JPanelは単層であり、paint
メソッドをオーバーライドしてからボタンを追加したときに最初に半透明のイメージをペイントしたため、ボタンが半透明であってはなりません。
2)また、これらの4つのボタンのうち、2つだけが半透明です。なぜそのような偏りがあるのですか?
3)これらの4つのボタンを追加する前にテーブルも追加すると、すべてが半透明になります。なぜですか。
Object[] names = new Object[] {
"Title", "Artist", "Album"
};
String[][] data = new String[][] {
{ "Los Angeles", "Sugarcult", "Lights Out" },
{ "Do It Alone", "Sugarcult", "Lights Out" },
{ "Made a Mistake", "Sugarcult", "Lights Out" },
{ "Kiss You Better", "Maximo Park", "A Certain Trigger" },
{ "All Over the Shop", "Maximo Park", "A Certain Trigger" },
{ "Going Missing", "Maximo Park", "A Certain Trigger" }
};
JTable table = new JTable(data, names);
frame.add(table);
4)paintComponent(Graphics g)
JPanelに使用する場合、テーブルを追加するかどうか、またはボタンをいくつ追加するかにかかわらず、何も半透明ではありません。なぜですか。
(アプリケーションを実行するとすぐに出力されるかどうかを尋ねています。マウスをこれらのボタンの上に置いたり、テーブルのいずれかの行をクリックすると不透明になることを知っています。これは、Swingのペイントメカニズムによるものです。)