Вопрос:

Можем ли мы сделать круглый JButton с круглым изображением в качестве значка кнопок?

java swing

137 просмотра

2 ответа

2 Репутация автора

Мне нужно сделать JFrame с круглой кнопкой и круглым изображением в качестве значка кнопки (любая вещь будет, но маска будет проще для меня ).

До сих пор я искал эти вещи, но я нашел круглый JButton, но с изображением ( Создание круглой кнопки с помощью примеров Java ) вместо изображения. Я ( для маскировки ) видел маскировку, но не знаю, как ее применить к кнопке, пожалуйста, помогите

Автор: KILLERMAN2003 Источник Размещён: 27.12.2017 08:10

Ответы (2)


0 плюса

118 Репутация автора

Решение

Измените paintComponent(g)метод класса RoundButton следующим образом.

protected void paintComponent(Graphics g) {
    g.setClip(new Ellipse2D.Double(0, 0, getWidth(), getHeight()));  // set the area that shall be painted
    g.drawImage(bim, 0, 0, getWidth(), getHeight(), null);    // draw the image, if available
    if (getModel().isArmed()) {      // show a slight gray shading when pressing the button
        g.setColor(new Color(127, 127, 127, 80));   // gray with 80 as alpha
        g.fillOval(0, 0, getSize().width - 1, getSize().height - 1);
    }
    super.paintComponent(g);
}

Кроме того, определите глобальную переменную private BufferedImage bimи установите ее следующим способом:

public void setButtonImage(BufferedImage pbim) {
    bim = pbim;
    repaint();
}

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

Автор: The_Programmer Размещён: 27.12.2017 12:32

0 плюса

56 Репутация автора

Некоторое время назад я написал класс OvalButton, который может обрабатывать JButton овальной, круглой и капсульной формы.

В вашем случае расширьте класс OvalButton и getBackgroundImage()метод переопределения, чтобы вернуть изображение, которое вы хотите установить в качестве фона. Затем добавьте слушателей и текст, как обычно. Только щелчок по овальной / круглой области запускает действие.

Пример класса кнопки для ваших нужд:

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

public class ImageButton extends OvalButton {

    private BufferedImage image;

    public ImageButton() {
        super(); // Default is oval/circle shape.

        setBorderThickness(0); // Oval buttons have some border by default.

        try {
            image = ImageIO.read(new File("your_image.jpg")); // Replace with the path to your image.
        } 
        catch (IOException e) {
            e.printStackTrace();
            image = null;
        }
    }

    @Override
    protected BufferedImage getBackgroundImage() {
        return image;
    }
}
Автор: Luka Kralj Размещён: 05.05.2019 12:18
Вопросы из категории :
32x32