Подтвердить что ты не робот

Как добавить изображение в JButton

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

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

Ответ 1

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

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

Ответ 2

@Rogach

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

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

Ответ 3

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

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

File imageCheck = new File(water.bmp);

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

Таким образом, если вы когда-либо ошиблись в своем имени пути, он скажет вам, а не отобразит ничего.

Ответ 4

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);
        }
    }

Ответ 5

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

setResizable(false);

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

Ответ 6

//paste required image on C disk
JButton button = new JButton(new ImageIcon("C:water.bmp");

Ответ 7

Этот код работает для меня:

    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);

Ответ 8

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

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

Ответ 9

buttonB.setIcon(new ImageIcon(this.getClass().getResource("imagename")));