Изменение размера JFrame от JPanel - PullRequest
0 голосов
/ 11 ноября 2019

Мне любопытно, есть ли способ изменить размер окна из JPanel объекта. Я ищу решение на некоторое время. Может быть, мне чего-то не хватает?

Я хочу изменить размер окна при использовании метода changeSize() (например, кнопка, я удалил код лота).

Я пробовал разные методы, такие как setSize, setPreferredSize и setBorders.

public class MAIN{
    public static void main(String[] args) {
         new Okno(new Panel_Saper());
    }
}

public class Okno extends JFrame{
    protected Okno(Panel panel) {
        setResizable(true);
        getContentPane();
        Container cp = getContentPane();
        cp.add(panel);
        pack();
        setDefaultCloseOperation(panel.getClose());//2 - JFrame.DISPOSE_ON_CLOSE, 3 - JFrame.EXIT_ON_CLOSE
        setVisible(true);
    }
}

public abstract class Panel extends JPanel {
    protected int getClose() {return 2;} //2 - JFrame.DISPOSE_ON_CLOSE
}//needed for override in other place

public class Panel_Saper extends Panel {
    Panel_Saper() {
        setLayout(null);
        setPreferredSize(new Dimension(400,400));   
    }

    public void changeSize() {//DOESN'T WORK
        SetSize(new Dimension(600,600));
        setBounds(0, 0, 600, 600);
        repaint();
    }
}

1 Ответ

1 голос
/ 11 ноября 2019

Для вашей пользовательской панели предпочтительно переопределить метод getPreferredSize(). Каждый компонент Swing отвечает за знание своего предпочтительного размера.

Если вы хотите изменить предпочтительный размер с 400 на 600, у вас должна быть причина для этого. Таким образом, у вас должно быть свойство для вашей панели, которое вы можете изменить.

Тогда ваша реализация метода getPreferredSize() проверит это свойство и вернет соответствующий размер в зависимости от текущего состояния вашей панели.

Я обошел стороной, закрыв и снова открыв окно

Теперь, когда ваш компонент правильно реализовал getPreferredSize(), вы можете просто вызвать pack() в JFrame.

...