Как я могу использовать модель JButton? - PullRequest
1 голос
/ 05 апреля 2020

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 -усным) подходом?

...