JButtonに画像を追加しようとしていますが、何が欠けているのかわかりません。次のコードを実行すると、ボタンは画像属性なしで作成した場合とまったく同じに見えます。 Water.bmpは、プロジェクトフォルダーのルートにあります。
ImageIcon water = new ImageIcon("water.bmp");
JButton button = new JButton(water);
frame.add(button);
あなたの問題は画像の場所にあると思います。ソースに配置し、次のように使用します。
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 /フォルダーにあると想定しています。
@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);
そのコードはアイコンを追加するのに最適なので、ロケーションの問題のように見えます。
あなたのフォルダ構造がわからないので、簡単なチェックを追加することをお勧めします。
File imageCheck = new File("water.bmp");
if(imageCheck.exists())
System.out.println("Image file found!")
else
System.out.println("Image file not found!");
このようにパス名を間違えた場合、何も表示せずに通知します。ファイルが存在しない場合は、例外をスローする必要があります。
リソースフォルダーに画像を配置し、次のコードを使用します。
JButton btn = new JButton("");
btn.setIcon(new ImageIcon(Class.class.getResource("/resources/img.png")));
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);
}
}
私は1つのことをしましたが、それは私のために働きました..あなたのコードがこのメソッドであるかどうかを確認してください..
setResizable(false);
それが偽ならそれを真実にし、それはうまく働くでしょう..私はそれが助けたことを願っています..
buttonB.setIcon(new ImageIcon(this.getClass().getResource("imagename")));
//paste required image on C disk
JButton button = new JButton(new ImageIcon("C:water.bmp");
このコードは私のために働く:
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);
たとえば、フォルダー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();
}
画像がボタンよりも大きい場合、表示されません。