Java, JFrame: getWidth () возвращает 0 - PullRequest
12 голосов
/ 09 августа 2011
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: Мне нужен размер кадра, прежде чем установить его видимым и прочее. Мне нужно добавить другие элементы управления в рамку, и их координаты и размер зависят от размера рамки.

Ответы [ 2 ]

12 голосов
/ 09 августа 2011

Причина, по которой вы получили 0, заключается в том, что вы не вызывали ни один из методов pack (), 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());
10 голосов
/ 09 августа 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...