Когда я впервые изучал Java, нам пришлось создать Yahtzee, и я подумал, что было бы здорово создавать собственные компоненты и контейнеры Swing вместо того, чтобы просто рисовать все на одном JPanel
. Преимущество расширения Swing
компонентов, конечно же, заключается в возможности добавлять поддержку сочетаний клавиш и других специальных возможностей, которые вы не можете сделать, просто используя метод paint()
для печати симпатичной картинки. Это может быть сделано не лучшим образом, но может стать хорошей отправной точкой для вас.
Редактировать 8/6 - Если это не было видно из изображений, каждый кубик - это кнопка, которую вы можете нажать. Это переместит его на DiceContainer
ниже. Глядя на исходный код, вы можете видеть, что каждая кнопка Die рисуется динамически в зависимости от ее значения.
Вот основные шаги:
- Создать класс, который расширяет
JComponent
- Вызовите родительский конструктор
super()
в ваших конструкторах
- Убедитесь, что вы реализуете класс
MouseListener
Поместите это в конструктор:
enableInputMethods(true);
addMouseListener(this);
Переопределить эти методы:
public Dimension getPreferredSize()
public Dimension getMinimumSize()
public Dimension getMaximumSize()
Переопределить этот метод:
public void paintComponent(Graphics g)
Объем пространства, с которым вам нужно работать при рисовании кнопки, определяется как getPreferredSize()
, при условии, что getMinimumSize()
и getMaximumSize()
возвращают одно и то же значение. Я не слишком много экспериментировал с этим, но в зависимости от макета, который вы используете для своего графического интерфейса, ваша кнопка может выглядеть совершенно иначе.
И, наконец, исходный код . На случай, если я что-то пропустил.