Как добавить изображение в JButton - PullRequest
43 голосов
/ 26 января 2011

Я пытаюсь добавить изображение в JButton, и я не уверен, что мне не хватает.Когда я запускаю следующий код, кнопка выглядит точно так же, как если бы я создал ее без какого-либо атрибута изображения.Water.bmp находится в корне папки моего проекта.

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

Ответы [ 10 ]

70 голосов
/ 26 января 2011

Я думаю, что ваша проблема в расположении изображения.Вы должны поместить его в свой источник, а затем использовать его так:

  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 /.

15 голосов
/ 21 ноября 2012

@ Рогач

и вы можете добавить:

// 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);
6 голосов
/ 21 февраля 2011

Это похоже на проблему с расположением, потому что этот код отлично подходит для добавления иконки.

Поскольку я не знаю структуру вашей папки, я предлагаю добавить простую проверку:

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

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

Таким образом, если вы когда-нибудь неправильно введете свой путь, он скажет вам вместо того, чтобы ничего не показывать.Исключение должно быть выдано, если файл не существует, хотя.

2 голосов
/ 16 марта 2018

Вы помещаете свое изображение в папку ресурсов и используете следующий код:

JButton btn = new JButton("");
btn.setIcon(new ImageIcon(Class.class.getResource("/resources/img.png")));
2 голосов
/ 22 декабря 2011

Я сделал только одну вещь, и это сработало для меня .. проверьте ваш код, есть ли этот метод там ..

setResizable(false);

если оно ложно, сделайте его верным, и оно будет работать просто отлично.помог ..

2 голосов
/ 26 января 2011
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 голос
/ 26 мая 2015

У меня этот код работает:

    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 голос
/ 10 апреля 2015
//paste required image on C disk
JButton button = new JButton(new ImageIcon("C:water.bmp");
1 голос
/ 29 марта 2015
buttonB.setIcon(new ImageIcon(this.getClass().getResource("imagename")));
0 голосов
/ 17 августа 2016

Например, если у вас есть изображение в папке 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();
}

В одну строку:

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

Если изображение больше кнопки, оно будетне показано.

...