- ベストアンサー
JButton-背景の透明化
JButtonにImageIconで透明部分を持つ画像を貼り付けたのですが、 画像の透明部分が、ボタンの背景色になってしまします。 ボタンの背景色を透明にする方法はないのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 なんか難しいことをしないといけないのかと思っていたら、そのものずばりのメソッドがありました。 AbstractButtonのsetBorderPainted(boolean b)を使うとよさそうです。 http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/javax/swing/AbstractButton.html#setBorderPainted(boolean) やってみたら、Look&FeelがMetalの場合は、枠線が残って、少しかっこ悪そうなので、枠線を消してみたりいろいろしてみたのですが、いまいちしっくりきません。 Look&FeelがWindowsの場合が、一番、それっぽい感じになりそうです。 とりあえず、いろいろ試行錯誤してみてください。 どうしてもしっくりいかないようなら、カスタムボタンを自作してみるという手もあるかもしれません。 import javax.swing.*; import java.awt.*; public class ButtonTest extends JFrame { CanvasPanel panel; JButton button; public static void main(String[] args) { //Look&FeelをWindows風にしてみたらいい感じかも。 /* try { UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); } catch (Exception ex) {} */ ButtonTest frame = new ButtonTest(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(600, 400); frame.setVisible(true); } public ButtonTest() { panel = new CanvasPanel(); getContentPane().add(panel, BorderLayout.CENTER); button = new JButton("Test"); //これが透けるメソッド button.setContentAreaFilled(false); //↓枠線が邪魔な場合は消してみたりしてみる。 //button.setBorderPainted(false); panel.add(button); } class CanvasPanel extends JPanel { Image image; public CanvasPanel() { image = Toolkit.getDefaultToolkit().getImage("Test.jpg"); } public void paintComponent(Graphics g) { super.paintComponent(g); g.drawImage(image, 0, 0, this); } } }
その他の回答 (1)
- PecoPlus
- ベストアンサー率76% (144/188)
こんにちは。 どうも具体的にどのようにしたいのかイメージがわきません。 ボタンを透けさせて、その先に何が見えるようになればいいのですか? 1.親コンテナの背景色を見せたい。 (これは普通のボタンと大して変わらない) 2.親コンテナに絵が描いてあり、それを見せたい。 3.親コンテナの中でコンポーネントが重なっていて、向こうにあるコンポーネントを見せたい。 4.完全に透け透け、ウインドウに穴が開いてるように見せたい。 (ウェブのどこかにそんな感じのやり方が書いてあったような気がするが、すごく難しそう) そもそもJButtonを使うべき場合なのかも、よくわかりません。 もう少し、補足をお願いいたします。
補足
すみません、説明不足でした。 やりたいのは、 2.親コンテナに絵が描いてあり、それを見せたい。 です。 ボタンには、角が丸い長方形の絵が描いてあり、その角の部分に、親コンテナ(ウィンドウ)に描いてある絵を透けさせたいと思っています。 Javaをはじめたばかりなので、どのようなことを補足すればよいのかあまり分かりません。 Javaのバージョンは1.5.0で、OSはwindowsXPです。 よろしくお願いします。
お礼
ご回答ありがとうございます。 javaプラットフォームのリファレンスで、目的のようなメソッドがあるのか探したのですが、setBackground,などの方ばかり目に付いて、どうやら見落としていたようです。 枠線を操作する setBorderPainted(boolean b) は知っていたのですが、 ずばり、ボタンの背景を消すようなメソッド、 setContentAreaFilled(boolean b); があったんですね。 あまりにも単純な質問で申し訳ありませんでした。