• ベストアンサー

JButton-背景の透明化

JButtonにImageIconで透明部分を持つ画像を貼り付けたのですが、 画像の透明部分が、ボタンの背景色になってしまします。 ボタンの背景色を透明にする方法はないのでしょうか?

  • Java
  • 回答数2
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
  • PecoPlus
  • ベストアンサー率76% (144/188)
回答No.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);     }   } }

参考URL:
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/javax/swing/AbstractButton.html#setBorderPainted(boolean)
fellows3
質問者

お礼

ご回答ありがとうございます。 javaプラットフォームのリファレンスで、目的のようなメソッドがあるのか探したのですが、setBackground,などの方ばかり目に付いて、どうやら見落としていたようです。 枠線を操作する setBorderPainted(boolean b) は知っていたのですが、 ずばり、ボタンの背景を消すようなメソッド、 setContentAreaFilled(boolean b); があったんですね。 あまりにも単純な質問で申し訳ありませんでした。

その他の回答 (1)

  • PecoPlus
  • ベストアンサー率76% (144/188)
回答No.1

 こんにちは。  どうも具体的にどのようにしたいのかイメージがわきません。  ボタンを透けさせて、その先に何が見えるようになればいいのですか? 1.親コンテナの背景色を見せたい。 (これは普通のボタンと大して変わらない) 2.親コンテナに絵が描いてあり、それを見せたい。 3.親コンテナの中でコンポーネントが重なっていて、向こうにあるコンポーネントを見せたい。 4.完全に透け透け、ウインドウに穴が開いてるように見せたい。 (ウェブのどこかにそんな感じのやり方が書いてあったような気がするが、すごく難しそう)  そもそもJButtonを使うべき場合なのかも、よくわかりません。  もう少し、補足をお願いいたします。

fellows3
質問者

補足

すみません、説明不足でした。 やりたいのは、 2.親コンテナに絵が描いてあり、それを見せたい。 です。 ボタンには、角が丸い長方形の絵が描いてあり、その角の部分に、親コンテナ(ウィンドウ)に描いてある絵を透けさせたいと思っています。 Javaをはじめたばかりなので、どのようなことを補足すればよいのかあまり分かりません。 Javaのバージョンは1.5.0で、OSはwindowsXPです。 よろしくお願いします。

関連するQ&A

  • ImageIconをJButtonに事後的に表示するには

    こんにちは。 JButtonにImageIconを表示するのに、コンストラクタ で表示するのは分かるのですが、事後的に表示する 方法は無いでしょうか。 具体的には、ボタンを押したのをきっかけに、 ボタンの画像を変えるとか。 実は・・ 現在凡庸的なレイアウトのJButton,JTextAreaなどを 配置したフレームを継承して使っているのですが、 JButtonは、既に配置されているので、コンストラクタ では、ImageIconを設置できないのです。 なにか分かる人、お願いします。

    • ベストアンサー
    • Java
  • Eclipse3.6でSwingアプリケーションを作成しています。

    Eclipse3.6でSwingアプリケーションを作成しています。 ImageIconで画像のアドレスを登録し、画像をボタンとして使用したいのですが、画像のアドレスがフルアドレスでないとEclipse上で実行したときに画像が表示されません。 起動しているJAVAファイルと画像ファイルは同じ場所に保存してあります。 何か他の設定があるのでしょうか? 通常のJAVAコンパイル時のソース ImageIcon icon1 = new ImageIcon("./test.png"); JButton button1 = new JButton(icon1); ※このソースではEclipse上では画像が表示されない Eclipse上で起動させて時のソース ImageIcon icon1 = new ImageIcon("c:/eclipse/workspace/src/test.png"); JButton button1 = new JButton(icon1); 以上です。 宜しくお願いします。

    • ベストアンサー
    • Java
  • JButtonの座標(0,0)にアイコンをセット

    JButtonに以下のように、画像を書込む際、画像を一番は端(左上角)から乗せたいです。 つまり、ボタンの右上角(0,0)から乗せたいのです。 現状では、左端に隙間があいてしまいます。 この方法がご存知の方がおられましたら教えてください。 よろしくお願いいたします。 import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JFrame; public class Zoom extends JComponent { private static final long serialVersionUID = 1L; private ImageIcon icon = null; private int x = 0; private int y = 0; private int h = 0; private int w = 0; private double scale = 1.0d; public Zoom(ImageIcon icon, int x, int y, int w, int h) { super(); this.icon = icon; this.x = x; this.y = y; this.w = w; this.h = h; } public void paintComponent(Graphics g) { Graphics2D g2 = (Graphics2D) g; g2.scale(scale, scale); g2.drawImage(icon.getImage(), x, y, w, h, this); } public static void main(String[] args) { ImageIcon icon = new ImageIcon("cherry.jpg"); Zoom zoom = new Zoom(icon,0,0,100,100); JButton b = new JButton(); JFrame f = new JFrame(); b.add(zoom); b.setPreferredSize(new Dimension(icon.getIconHeight(), icon.getIconWidth())); f.add(b); f.pack(); f.setVisible(true); } }

    • ベストアンサー
    • Java
  • JButtonの画像をactionPerformedメソッド内で再描画

    JButtonの画像をactionPerformedメソッド内で再描画したい。 以下のソースのようにして、再描画したいのです。 setIconメソッドではなく、 JButtonに対して描画したものに対して再描画したいです。 Graphics2DクラスについてJAVA APIで調べましたが、 仕組の理解に至りませんでした。 仕組みと方法を教えて頂きたいです。 よろしくお願いいたします。 import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JFrame; public class test extends JFrame implements ActionListener{ JButton b= new JButton(); public static void main(String a[]) { new test(); } public test() { super(); this.setSize(100,100); b.addActionListener(this); b.add(new Zoom(new ImageIcon("img1.jpg"),0,0,50,50)); this.add(b); this.setVisible(true); } class Zoom extends JComponent { private static final long serialVersionUID = 1L; private ImageIcon icon = null; private int x = 0; private int y = 0; private int h = 0; private int w = 0; private double scale = 1.0d; public Zoom(ImageIcon icon, int x, int y, int w, int h) { super(); this.icon = icon; this.x = x; this.y = y; this.w = w; this.h = h; } public void paintComponent(Graphics g) { Graphics2D g2 = (Graphics2D) g; g2.scale(scale, scale); ////////////////////////////////// //画僧を再描画したい。 //g2.clearRect(0, 0, 80, 80);//× g2.drawImage(icon.getImage(), x, y, w, h, this); } } public void actionPerformed(ActionEvent e) { if(e.getSource()==b){ System.out.print("ok"); //this.repaint();//× //b.repaint();//× b.add(new Zoom(new ImageIcon("img2.jpg"),0,0,50,50));//(再描画できない) //b.setIcon(new ImageIcon("img2.jpg"));//ok(再描画出来る) } } }

    • ベストアンサー
    • Java
  • JTableに貼り付けたJButton名の取得がうまくできません

    JTableには、通常のセルの部分とボタンの部分があり、ボタンが選択された際にボタン名を取得したいのですが、セルの値を取得してしまいます。 ボタン名を取得するにはどうしたらよいのでしょうか。 DBからレコードを取得し、それを配列にいれています。 1~3個目は、そのままデータ用の配列に入れ、4~10のフィールドをコマンドボタンの名前としJTableに貼り付けています。 data[0][0] = 1 data[0][1] = 2 data[0][2] = 3 data[0][3] = New JButton(field1) data[0][4] = New JButton(field2) ・ ・ ・ 選択されたセルの値を取得すると「jswing....」となってしまいます。 どなたかご存知でしたら、教えて下さい。

  • JAVAでの背景画像表示

    現在javaでゲームのメニュー画面を作っているのですが、ボタンを配置する所まではできたんですが、背景に画像を表示することができなくて困っています! import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JLabel; import javax.swing.ImageIcon; import java.awt.Container; import java.awt.BorderLayout; import javax.swing.border.LineBorder; import javax.swing.border.EtchedBorder; import java.awt.Color; import java.awt.Container; public class Mati extends JFrame{ public static void main(String[] args){ Mati frame = new Mati(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(10, 10,650,650); frame.setTitle("街"); frame.setVisible(true); JPanel h = new JPanel(); h.setOpaque(false); ImageIcon icon1 = new ImageIcon("Mati.jpg"); JLabel label1 = new JLabel(icon1); JLabel label2 = new JLabel(); h.add(label1); } Mati(){ JButton button1 = new JButton("宿屋"); button1.setFont(new Font("Mairyo", Font.PLAIN, 30)); JButton button2 = new JButton("道具屋"); button2.setFont(new Font("Mairyo", Font.PLAIN, 30)); JButton button3 = new JButton("武器屋"); button3.setFont(new Font("Mairyo", Font.PLAIN, 30)); JButton button4 = new JButton("街を出る"); button4.setFont(new Font("Mairyo", Font.PLAIN, 30)); JPanel p = new JPanel(); p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS)); p.add(Box.createRigidArea(new Dimension(10,30))); p.add(button1); p.add(Box.createRigidArea(new Dimension(5,8))); p.add(button2); p.add(Box.createRigidArea(new Dimension(5,8))); p.add(button3); p.add(Box.createRigidArea(new Dimension(5,8))); p.add(button4); getContentPane().add(p, BorderLayout.CENTER); } } ソースはこのようになっています。これからどうすれば背景画像が表示されるか教えていただきたいです。 よろしくお願いします。

  • JButtonがsetEnabled(false)の時の文字色

    こんにちは。 タイトルのとおりなのですが、JButtonがsetEnabled(false)の時の文字色って何色なんでしょう? ボタンのテキストを二段にしたいため、 JButton myButton = new JButton(); myButton.setText("<html>上<br>下"); と設定します。 それで、ボタンに触れないようにするとき、 myButton.setEnabled(false); にすると、触れなくはなりますがボタンの文字色が黒のままなんです。 falseのとき文字色をgray,silver,#CCCCCC,#CCCCFFで試しましたが色が違いました・・・。 あの色にするのは無理なのでしょうか!? ご存知の方いましたら、よろしくお願いします。 (二段にする方法が他にあったらそれもお願いします!)

    • ベストアンサー
    • Java
  • JButtonのバックカラーについて

    質問させてください。 Win2000,JBuilderを使用しています。 この環境で作成したjarファイルをWinXPで起動してUIを確認したところ、 JButtonのバックカラーがボタン全体ではなくボタンの周りの輪郭部分のみ変更されていました。 (jbtn.setBackground(Color.pink) ); Win2000で起動すると正常にボタンのバックカラーが塗られています。 ちなにみJtextFieldなどのバックカラーはXPでも正常に表示されています。 XPではボタンの色は輪郭部分しか変更できないのでしょうか? どなたか詳しい方がいらしたら教えてください。

    • ベストアンサー
    • Java
  • NetBeansでのJButtonの配列化

    NetBeansを使ってGUIプログラミングを行っているのですが、パレットからJButtonを選んでパネルにいくつか配置したのですが、それらを一つの配列で作成することはできるのでしょうか? 現在、カレンダの作成をボタンで行っていて二元配列が作成できないと難しいのでよろしくお願いします。

  • FLASHの背景色について

    HTMLで背景に画像を使って、その上にFLASHを重ねています。 IEで確認すると、FLASH部分の背景が透過になっていてちゃんと下の背景が見えます。 しかし、ネスケで見るとFLASHの領域部分が作成時の背景色になり、背景画像が見えなくなり、ショボイHPになってしまします。 これを回避する方法を教えてください!お願いします

専門家に質問してみよう