Вы пробовали следующее?
button.setOpaque(false);
button.setFocusPainted(false);
button.setBorderPainted(false);
button.setContentAreaFilled(false);
setBorder(BorderFactory.createEmptyBorder(0,0,0,0)); // Especially important
setBorder(null)
мог бы работать, но существует ошибка, описанная в Sun, объясняя, что это дизайном, что UI устанавливает границу на компоненте, если клиент не устанавливает непустую границу, которая не реализует эти UIResource
интерфейс.
, А не сам JDK, устанавливающий границу на EmptyBorder
, когда пустой указатель передается в, клиенты должны установить EmptyBorder
сами (очень легкое обходное решение). Тем путем там не является никакой беспорядок о том, кто делает что в коде.
Я рекомендовал бы переопределить краску (Графика g) метод как так:
class JImageButton extends JComponent implements MouseListener {
private BufferedImage img = null;
public JImageButton(BufferedImage img) {
this.img = img;
setMinimumSize(new Dimension(img.getWidth(), img.getHeight()));
setOpaque(false);
addMouseListener(this);
}
public void paintComponent(Graphics g) {
g.drawImage(img, 0, 0, img.getWidth(), img.getHeight(), null);
}
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
}
Непрозрачность должна иметь значение false, таким образом
button.setOpaque(false);
мог уже быть тем, что Вы хотите.