Java Swing основан на (приблизительном) понятии MVC, и с его компонентами пользовательского интерфейса обычно связана какая-то модель.
Так что же такое модель для JButton
? Я не очень знаком с Java Swing. Это экземпляр класса javax.swing.DefaultButtonModel
? Или реализация интерфейса javax.swing.ButtonModel
?
Кроме того, некоторые люди говорят, что мы редко должны расширять Java компонент Swing.
Так что в этом духе я имею концепция «кнопки фигуры» в простой игре с угадыванием цвета, представляющей собой кнопку, привязанную к Piece
(фигура просто представляет один цвет, я мог бы также использовать вместо нее Color
). Он не должен расширять JButton
, потому что он не изменяет ни одну из своих функций. Также использование композиции не имеет смысла в этом случае.
Так что мне делать? Должен ли я добавить Piece
к модели кнопки? Если да, то как мне это сделать?
Или я должен игнорировать предыдущие утверждения и вместо этого расширять JButton
? Тогда у меня было бы что-то вроде этого:
public final class PieceButton extends JButton {
private static final long serialVersionUID = 1L;
private final Piece piece;
public PieceButton(Piece piece, int iconSize) {
this.piece = Objects.requireNonNull(piece);
setIcon(new ColorRoundIcon(iconSize, piece.getColor()));
}
public Piece getPiece() {
return piece;
}
}
Так что же является наилучшим (OOP -усным) подходом?