Java: использование изображения в качестве кнопки - PullRequest
53 голосов
/ 04 февраля 2011

Я хотел бы использовать изображение в качестве кнопки в Java, и я попытался сделать это:

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

Но это по-прежнему показывает фактическую кнопку позади изображения, я бы хотел, чтобы изображениефункция как кнопка, как я могу это сделать?

Ответы [ 9 ]

27 голосов
/ 04 февраля 2011

Удалить границу так:

button.setBorder(BorderFactory.createEmptyBorder());

, а затем также содержимое 1 :

button.setContentAreaFilled(false);

1 : взято из решения, добавленного к вопросу @ 3sdmx

9 голосов
/ 04 февраля 2011

Рекомендуется установить изображение в качестве метки и добавить слушатель мыши для метки, чтобы обнаруживать щелчки.

1 голос
/ 09 декабря 2015

просто напишите это

button.setContentAreaFilled(false);
1 голос
/ 11 марта 2014
    BufferedImage buttonIcon = ImageIO.read(new File("myImage.png"));
    button = new JButton(new ImageIcon(buttonIcon));
    button.setBorderPainted(false);
    button.setFocusPainted(false);
    button.setContentAreaFilled(false);
1 голос
/ 10 сентября 2013

Это легко сделать в netbeans, установив для свойства contentAreaFilled значение False

1 голос
/ 04 февраля 2011
button.setBorderPainted( false );
1 голос
/ 04 февраля 2011

buttonIcon.setBorder (новый EmptyBorder (0,0,0,0));

0 голосов
/ 25 августа 2016

Я выполнил следующие шаги и смог успешно создать 'ImageButton'.

  1. Создать JButton
  2. Добавлен слушатель действий
  3. Установить значок изображения (обратите внимание, я поместил значок info.png в папку src \ main \ resources и загружен с помощью загрузчика классов). Структура проекта такая же, как здесь. Project folder structure
  4. Установить пустое Border
  5. Отключено заполнение области содержимого
  6. Отключена фокусировка
  7. Добавлено в панель содержания

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

Насколько я знаю, не существует простого способа сделать это, вам нужно переопределить метод "paintComponent" класса JButton, чтобы оставить ваше изображение, если вы только хотите отобразить изображение и вести себя как кнопкаВы можете добавить JPanel, который рисует изображение ( clicky ) и добавить MouseListener / MouseAdapter для обработки события mousePressed

...