2011-02-04 3 views
51

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

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

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

ответ

26

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

button.setBorder(BorderFactory.createEmptyBorder()); 

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

button.setContentAreaFilled(false); 

: Взятые из раствора добавляют к вопросу от @ 3sdmx

+0

Этот вид сделал трюк, но есть все еще какой-то фон из самой кнопки, есть ли способ полностью удалить его? Или настроить прозрачность? – 3sdmx

+0

Вы можете попробовать установить фон на другой цвет или прозрачно. Имеет ли ваше изображение прозрачность или сплошной квадрат? – jzd

8

Предполагалось бы установить изображение как метку и добавить метку мыши к метке для обнаружения кликов.

Пример:

ImageIcon icon = ...; 

JLabel button = new JLabel(icon); 

button.addMouseListener(new MouseAdapter() { 
    @Override 
    public void mouseClicked(MouseEvent e) { 
    ... handle the click ... 
    } 
}); 
+0

Это сработало для моей ситуации. – SingleShot

0

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

1

buttonIcon.setBorder (новый Пустая граница (0,0 , 0,0));

+0

Это по-прежнему рисует то, что выглядит как очень маленькая версия границы кнопки, по крайней мере, на MacOS. – SingleShot

1
button.setBorderPainted(false); 
+0

Это по-прежнему окрашивает границу кнопки/заливку, по крайней мере, на MacOS. – SingleShot

1

Это можно легко сделать в NetBeans, установив contentAreaFilled собственности на Ложное

1
BufferedImage buttonIcon = ImageIO.read(new File("myImage.png")); 
    button = new JButton(new ImageIcon(buttonIcon)); 
    button.setBorderPainted(false); 
    button.setFocusPainted(false); 
    button.setContentAreaFilled(false); 
1

просто написать этот

button.setContentAreaFilled(false); 
0

я следовал ниже шагов, и я мог бы создать " ImageButton 'успешно.

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

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

Смежные вопросы