Да, это возможно. Один из основных профессионалов для использования Swing является простотой, с которой абстрактные средства управления могут быть созданы и управляют.
Вот быстрый и грязный способ расширить существующий класс JButton, чтобы нарисовать круг направо от текста.
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);
}
}
Примечание, что путем переопределения paintComponent, что содержание кнопки может быть изменено, но что граница красится метод paintBorder . методом getPreferredSize также нужно управлять для динамичной поддержки изменений в содержании. Необходимо соблюдать осторожность при измерении метрик шрифта и размеров изображения.
Для создания управления, на которое можно полагаться, вышеупомянутый код не является корректным подходом. Размеры и цвета являются динамичными в Swing и зависят от используемого стиля. Даже значение по умолчанию Металл взгляд изменилось через версии JRE. Было бы лучше реализовать AbstractButton и соответствовать инструкциям, изложенным API Swing. Хорошая начальная точка должна посмотреть 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
Понимание анатомии LookAndFeel полезно для записи средств управления: Создание Пользовательского Стиля
Я бы назвал это тенденцией, а не бунтом, но я вижу то же самое в нашей компании, переходящей от C (25 лет назад) к C ++ (20 лет) и java (12 лет) на javascript и python (2 года).
Одной из причин могло быть то, что создание сценариев кажется более гибким и лучше для быстрой разработки (в чем я действительно сомневаюсь). Такое впечатление возникло, когда некоторые разработчики начали создавать хорошие приложения с впечатляющей скоростью разработки, в то время как «старое семейство объектно-ориентированных приложений» часто создавало (чрезмерно) сложные архитектуры приложений, которые демонстрировали удручающий прогресс.
Я думаю, что это не так. быть подготовленным, если критерием является время выхода на рынок (но иногда это помогает избавиться от старых привычек)
Согласен с kai1968, это скорее тренд. Вот хороший документ, подготовленный IEEE, который даст вам лучшее понимание Переход разработчиков на языки динамического программирования