Создание собственного JButton в Java

Да, это возможно. Одним из java-swing основных преимуществ использования java Swing является простота создания core-java абстрактных элементов управления javax.swing и управления ими.

Вот быстрый javax.swing и грязный способ расширить swing существующий класс JButton, чтобы core-java нарисовать круг справа от core-java текста.

package test;

import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;

import javax.swing.JButton;
import javax.swing.JFrame;

public class MyButton extends JButton {

    private static final long serialVersionUID = 1L;

    private Color circleColor = Color.BLACK;

    public MyButton(String label) {
        super(label);
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);

        Dimension originalSize = super.getPreferredSize();
        int gap = (int) (originalSize.height * 0.2);
        int x = originalSize.width + gap;
        int y = gap;
        int diameter = originalSize.height - (gap * 2);

        g.setColor(circleColor);
        g.fillOval(x, y, diameter, diameter);
    }

    @Override
    public Dimension getPreferredSize() {
        Dimension size = super.getPreferredSize();
        size.width += size.height;
        return size;
    }

    /*Test the button*/
    public static void main(String[] args) {
        MyButton button = new MyButton("Hello, World!");

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 400);

        Container contentPane = frame.getContentPane();
        contentPane.setLayout(new FlowLayout());
        contentPane.add(button);

        frame.setVisible(true);
    }

}

Обратите внимание, что java при переопределении paintComponent содержимое javax кнопки может быть изменено, но javax граница рисуется методом javax.swing paintBorder. Метод getPreferredSize также требует управления jre для динамической поддержки java изменений содержимого. Необходимо swing соблюдать осторожность при openjdk измерении показателей шрифта javax и размеров изображения.

Для java-api создания элемента управления, на java-libraries который можно положиться, приведенный javax.swing выше код не является правильным .java подходом. Размеры и цвета jre в Swing являются динамическими openjdk и зависят от используемого jbutton внешнего вида. Даже внешний javax.swing вид Metal по умолчанию изменился java-api в версиях JRE. Было бы лучше jbutton реализовать AbstractButton и соответствовать java рекомендациям, установленным jbutton API Swing. Хорошей отправной swing точкой является рассмотрение .java классов javax.swing.LookAndFeel и javax.swing.UIManager.

http://docs.oracle.com/javase/8/docs/api/javax/swing/LookAndFeel.html

http://docs.oracle.com/javase/8/docs/api/javax/swing/UIManager.html

Понимание анатомии jre LookAndFeel полезно для написания core-java элементов управления: Creating a Custom Look and Feel

java

swing

jbutton

2022-08-13T17:16:08+00:00