JButton с иконкой Clickable Java - PullRequest
0 голосов
/ 31 января 2020

Попытка сделать jButton со значком. Как избавиться от контура кнопки за значком и как сделать значок кликабельным? Единственный способ, которым мой слушатель действия активируется, состоит в том, что нажата схема кнопки позади значка. Не фактическая иконка.

public class RoundButton extends JButton {
    String iconPath = "/Users/Desktop/SNN/snn_emro_ui/gui_emro/gui_emro copy/src/resources/cross.png";
    JButton exitButton;
    public RoundButton() {
        ImageIcon icon = new ImageIcon(iconPath);
        exitButton = new JButton(icon);
        add(exitButton);
    }
}

the inner grey square with the X is the icon, not clickable and the white out part is the only part that is 'clickable'

1 Ответ

0 голосов
/ 31 января 2020

Попробуйте этот пример.

Ключевой оператор изменяет размер кнопки в соответствии с иконкой. Поэтому вы можете захотеть масштабировать значок до соответствующего размера.

Другие варианты:

  1. Измените вставки кнопки на все 0, используя setMargins.
  2. Установка границы кнопки на null. Это не указывает на то, что кнопка была нажата.

Я предпочитаю вариант изменения размера или вставки.

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Image;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class JButtonExample extends JPanel {

    final static int height = 500;
    final static int width = 500;
    JFrame frame = new JFrame();

    public static void main(String[] args) {
        SwingUtilities.invokeLater(
                () -> new JButtonExample().start());
    }

    public void start() {
        File file = new File("your image file name here");
        try {
        Image img = ImageIO.read(file);
        ImageIcon icon = new ImageIcon(img);
        JButton button = new JButton(icon);
        add(button);
        setBackground(Color.white);
        button.addActionListener((ae)-> System.out.println("Button Clicked"));
        button.setPreferredSize(new Dimension(icon.getIconWidth(), icon.getIconHeight()));
        } catch (IOException ie) {
            ie.printStackTrace();
        }
    }

    public JButtonExample() {
        frame.setDefaultCloseOperation(
                JFrame.EXIT_ON_CLOSE);
        frame.add(this);
        setPreferredSize(
                new Dimension(width, height));
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

}
...