Подтвердить что ты не робот

Java, JFrame: getWidth() возвращает 0

setExtendedState(getExtendedState()|JFrame.MAXIMIZED_BOTH);
setResizable(false);
setUndecorated(true);
System.out.println("--------> "+getContentPane().getWidth()); //----> 0 why is this happening?

Я пытаюсь определить размер JFrame. Я искал в Google и проверил документацию, и я до сих пор не знаю, почему это не сработает Он отлично работает на любом другом контроле, который я пробовал на нем

EDIT: frame.getWidth() работает при вызове вне класса (который расширяет JFrame) все же, если я заменил

System.out.println("--------> "+getContentPane().getWidth());

с

System.out.println("--------> "+this.getWidth());

getWidth по-прежнему будет возвращать 0

EDIT2: Мне нужно размер кадра, прежде чем устанавливать его видимым и прочим. Мне нужно добавить другие элементы управления в фрейм, а их координаты и размер зависят от размера фрейма.

4b9b3361

Ответ 1

Причина, по которой вы получили 0, состоит в том, что вы не вызывали никаких пакетов(), setSize (int, int) или setSize (Dimension). Это только при вызове одного из этих методов, который будет вычислен макет вашего фрейма.

JFrame frame = new JFrame("My Frame");
frame.setExtendedState(getExtendedState()|JFrame.MAXIMIZED_BOTH);
frame.setResizable(false);
frame.setUndecorated(true);
frame.pack(); // Important line!!! 
frame.setVisible(true);
System.out.println("--------> "+getContentPane().getWidth());

Ответ 2

Вы еще не реализовали (т.е. setVisible(true)) JFrame. И, следовательно, он не имеет размеров, поскольку он не выложил свои компоненты.