web-dev-qa-db-ja.com

JButtonに画像を追加する方法

JButtonに画像を追加しようとしていますが、何が欠けているのかわかりません。次のコードを実行すると、ボタンは画像属性なしで作成した場合とまったく同じに見えます。 Water.bmpは、プロジェクトフォルダーのルートにあります。

ImageIcon water = new ImageIcon("water.bmp");
    JButton button = new JButton(water);
    frame.add(button);
43
kevinstueber

あなたの問題は画像の場所にあると思います。ソースに配置し、次のように使用します。

  JButton button = new JButton();
  try {
    Image img = ImageIO.read(getClass().getResource("resources/water.bmp"));
    button.setIcon(new ImageIcon(img));
  } catch (Exception ex) {
    System.out.println(ex);
  }

この例では、画像がsrc/resources /フォルダーにあると想定しています。

70
Rogach

@Rogach

以下を追加できます:

// to remote the spacing between the image and button's borders
button.setMargin(new Insets(0, 0, 0, 0));
// to add a different background
button.setBackground( ... );
// to remove the border
button.setBorder(null);
15
ungalcrys

そのコードはアイコンを追加するのに最適なので、ロケーションの問題のように見えます。

あなたのフォルダ構造がわからないので、簡単なチェックを追加することをお勧めします。

File imageCheck = new File("water.bmp");

if(imageCheck.exists()) 
    System.out.println("Image file found!")
else 
    System.out.println("Image file not found!");

このようにパス名を間違えた場合、何も表示せずに通知します。ファイルが存在しない場合は、例外をスローする必要があります。

6
donnyton

リソースフォルダーに画像を配置し、次のコードを使用します。

JButton btn = new JButton("");
btn.setIcon(new ImageIcon(Class.class.getResource("/resources/img.png")));
2
ParisaN
public class ImageButton extends JButton {

    protected ImageButton(){
    }

    @Override
        public void Paint(Graphics g) {
        Graphics2D g2 = (Graphics2D) g;
        Image img = Toolkit.getDefaultToolkit().getImage("water.bmp");

        g2.drawImage(img, 45, 35, this);
        g2.finalize();
    }
}

またはこのコードを使用

class MyButton extends JButton {

    Image image;
    ImageObserver imageObserver;


    MyButtonl(String filename) {
            super();
            ImageIcon icon = new ImageIcon(filename);
            image = icon.getImage();
            imageObserver = icon.getImageObserver();
        }

     public void Paint( Graphics g ) {
            super.Paint( g );
            g.drawImage(image,  0 , 0 , getWidth() , getHeight() , imageObserver);
        }
    }
2
KFC

私は1つのことをしましたが、それは私のために働きました..あなたのコードがこのメソッドであるかどうかを確認してください..

setResizable(false);

それが偽ならそれを真実にし、それはうまく働くでしょう..私はそれが助けたことを願っています..

2
Dan
buttonB.setIcon(new ImageIcon(this.getClass().getResource("imagename")));
1
HeavenlySwirl
//paste required image on C disk
JButton button = new JButton(new ImageIcon("C:water.bmp");
1
JavaJitendra

このコードは私のために働く:

    BufferedImage image = null;
    try {
        URL file = getClass().getResource("water.bmp");
        image = ImageIO.read(file);
    } catch (IOException ioex) {
        System.err.println("load error: " + ioex.getMessage());
    }
    ImageIcon icon = new ImageIcon(image);
    JButton quitButton = new JButton(icon);
1
CamelTM

たとえば、フォルダーres/image.pngに画像がある場合、次のように記述できます。

try
{
    ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
    InputStream input = classLoader.getResourceAsStream("image.png");
    // URL input = classLoader.getResource("image.png"); // <-- You can use URL class too.
    BufferedImage image = ImageIO.read(input);

    button.setIcon(new ImageIcon(image));
}
catch(IOException e)
{
    e.printStackTrace();
}

1行で:

try
{
    button.setIcon(new ImageIcon(ImageIO.read(Thread.currentThread().getContextClassLoader().getResourceAsStream("image.png"))));
}
catch(IOException e)
{
    e.printStackTrace();
}

画像がボタンよりも大きい場合、表示されません。

0
Oxygenium