web-dev-qa-db-ja.com

Java:画像をボタンとして使用する

Javaのボタンとして画像を使用したいのですが、これを試みました:

BufferedImage buttonIcon = ImageIO.read(new File("buttonIconPath"));
button = new JButton(new ImageIcon(buttonIcon));

しかし、これはまだ画像の背後にある実際のボタンを示しています。画像をボタンとしてのみ機能させたいのですが、どうすればよいですか?

54
3sdmx

次のように境界線を削除します。

button.setBorder(BorderFactory.createEmptyBorder());

そしてまた内容1

button.setContentAreaFilled(false);

1:@ 3sdmxによって質問に追加されたソリューションから取得

28
jzd

画像をラベルとして設定し、マウスリスナーをラベルに追加してクリックを検出することをお勧めします。

例:

ImageIcon icon = ...;

JLabel button = new JLabel(icon);

button.addMouseListener(new MouseAdapter() {
  @Override
  public void mouseClicked(MouseEvent e) {
     ... handle the click ...
  }
});
9
thotheolh
    BufferedImage buttonIcon = ImageIO.read(new File("myImage.png"));
    button = new JButton(new ImageIcon(buttonIcon));
    button.setBorderPainted(false);
    button.setFocusPainted(false);
    button.setContentAreaFilled(false);
1
Vladimir

buttonIcon.setBorder(new EmptyBorder(0,0,0,0));

1
StanislavL

これを書いてください

button.setContentAreaFilled(false);
1
Adham Gamal
button.setBorderPainted( false );
1
camickr

これは、contentAreaFilledプロパティをFalseに設定することにより、netbeansで簡単に実行できます。

1
unleashed

以下の手順に従って、「ImageButton」を正常に作成できました。

  1. JButtonを作成します
  2. アクションリスナーを追加しました
  3. 画像アイコンを設定します(info.pngアイコンはsrc\main\resourcesフォルダーにあり、クラスローダーを使用して読み込まれます。プロジェクトの構造は次のとおりです。 Project folder structure
  4. 空のBorderを設定します
  5. コンテンツ領域の塗りつぶしを無効にしました
  6. フォーカス機能を無効にしました
  7. ContentPaneに追加されました

PFB私のために働いたコード

JButton btnNewButton = new JButton("");
btnNewButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        System.out.println("Info clicked");
    }
});

String iconfilePath = this.getClass().getClassLoader().getResource("info.png").getFile();
btnNewButton.setIcon(new ImageIcon(iconfilePath));
btnNewButton.setBounds(10, 438, 39, 31);
btnNewButton.setBorder(BorderFactory.createEmptyBorder());
btnNewButton.setContentAreaFilled(false);
btnNewButton.setFocusable(false);
contentPane.add(btnNewButton);

上記のコードから生成された出力ボタンは以下のとおりです

enter image description here

0
sunil

私が知っている限り、それを行う簡単な方法はありません。画像を表示してボタンのように振る舞うだけの場合は、JButtonクラスの "paintComponent"メソッドをオーバーライドして画像を無効にする必要があります。 JPanel wichが画像を描画し( clicky )、「mousePressed」イベントを処理するMouseListener/MouseAdapterを追加します

0
Harima555