Класс отображения, содержащая полотно в JFrame


Я использую этот класс так долго, я никогда не думал о том, как страшно большой, как плохо она выглядит. Оглядываясь назад на это, этот класс выглядит настолько устаревшим, и ничего не объясняет себя; я хочу, чтобы оно выглядело гораздо лучше, не со всем дополнительным барахлом, что это не нужно.
Вот класс:

import java.awt.Canvas;
import java.awt.Dimension;

import javax.swing.JFrame;

public class Display {

    private JFrame frame;
    private Canvas canvas;

    private String title;
    private int width, height;

    public Display(String title, int width, int height){
        this.title = title;
        this.width = width;
        this.height = height;

        createDisplay();
    }

    private void createDisplay(){
        frame = new JFrame(title);
        frame.setSize(width, height);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setResizable(false);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);

        canvas = new Canvas();
        canvas.setPreferredSize(new Dimension(width, height));
        canvas.setMaximumSize(new Dimension(width, height));
        canvas.setMinimumSize(new Dimension(width, height));
        canvas.setFocusable(false);

        frame.add(canvas);
        frame.pack();
    }

    public Canvas getCanvas(){
        return canvas;
    }

    public JFrame getFrame(){
        return frame;
    }

}

Здесь есть что-нибудь я могу сконденсировать, или любым способом, чтобы она выглядела чище?



97
1
задан 11 февраля 2018 в 03:02 Источник Поделиться
Комментарии
1 ответ

одна незначительная проблема - не избыточный код...

canvas = new Canvas();
canvas.setPreferredSize(new Dimension(width, height));
canvas.setMaximumSize(new Dimension(width, height));
canvas.setMinimumSize(new Dimension(width, height));
canvas.setFocusable(false);

вы должны использовать

canvas.setPreferredSize(dim); //see below
canvas.setMaximumSize(dim);
canvas.setMinimumSize(dim);

что ведет к другому вопросу:
создать конструктор по умолчанию, который не требует размер

private static final int DEFAULT_WIDTH = 100;
private static final int DEFAULT_HEIGHT = 100;
public Display(String title){
this(title, DEFAULT_WIDTH, DEFAULT_HEIGHT);
}

и использовать этот конструктор параметризованных:

//private int width, height; TODO remove: no more required
private static final Dimension dim;
public Display(String title, int width, int height){
this.dim = new Dimension(width, height);
createDisplay();
}

другой вопрос будет удаление атрибутов невостребованных - какой смысл держать титул? только вперед...

//private String title; TODO remove: no more required
public Display(String title, int width, int height){
this.dim = new Dimension(width, height);
createDisplay(title);
}

private void createDisplay(final String title){
frame = new JFrame(title);
...
}

2
ответ дан 12 февраля 2018 в 01:02 Источник Поделиться