Я новичок в java, я хотел бы получить от вас некоторые советы:
Я бы ввел в setPreferredSize() ширину и высоту класса менеджера, не используя "злую" статику, может ли кто-нибудь сказать мне самую умную вещь в этом случае?
возможно ли создать конструктор в классе менеджера и передать ширину и высоту, всегда соблюдая классы гибкости ООП?
Скажите мне, где я ошибаюсь в этом коде или что исправить, я хочу узнать, спасибо вам.
public class MainFrame extends JFrame {
public static void main(String[] args) {
final MainFrame mainFrame = new MainFrame();
mainFrame.setVisible(true);
}
public MainFrame() {
initFrame();
}
private void initFrame() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
add(Panel.getPanel());
setResizable(false);
setUndecorated(true);
pack();
setLocationRelativeTo(null);
}
}
public class Panel extends JPanel {
public Panel() {
setPreferredSize(new Dimension(/*?????????*/));
}
}
public class Manager {
private int width = 700;
private int height = 700;
// Some unrelated code follows
public int getHeight(){
return height;
}
public int getWidth(){
return width;
}
}
Я бы ввел в setPreferredSize() ширину и высоту класса менеджера, не используя "злую" статику, может ли кто-нибудь сказать мне самую умную вещь в этом случае?
Прочтите это, следует помочь. Должен ли я избегать использования методов set (Preferred | Maximum | Minimum) в Java Swing? , В общем, пусть макет-менеджер ведет с этим.
возможно ли создать конструктор в классе менеджера и передать ширину и высоту, всегда соблюдая классы гибкости ООП?
Да, сделайте их переменной класса (статичной), а также final
, это означает
Опция 1
//check class name
public class Manager {
public static final int width = 700;
public static final int height = 700;
}
Вариант 2,
public class Manager {
private static int width = 700; //could be final
private static int height = 700; // could be final
// Some unrelated code follows
public static int getHeight(){
//you can make some algorithm in this way
return height;
}
public static int getWidth(){
//you can make some algorithm in this way
return width;
}
}
Вариант 3: определение перечисления
public class Manager {
public enum Dimension{
WIDTH(700),
HEIGHT(700);
private final Integer value;
Dimension(Integer value){
this.value=value;
}
public Integer getValue(){
return value;
}
}
}
Я был неправ, чтобы написать add (Panel.getPanel()), это правильно? он уважает ООП?
Нет, это неверно, если getPanel()
является статическим методом. Вы должны создать экземпляр своего JPanel
JPanel panel = new Panel();
add(panel);
Также вы используете наследование плохо. Вы являетесь подклассом, но вы не добавляете никаких новых функций, и если вы решили подкласс, не используйте Panel
потому что это имя похоже на java.awt.Panel
и это очень запутанно.
Подробнее в учебниках оракула