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:
Мне нужно размер кадра, прежде чем устанавливать его видимым и прочим. Мне нужно добавить другие элементы управления в фрейм, а их координаты и размер зависят от размера фрейма.
Ответы
Ответ 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
. И, следовательно, он не имеет размеров, поскольку он не выложил свои компоненты.