Чтобы определить размер компонента, вам необходимо:
- установили его вручную в какой-то момент
- запустить диспетчер компоновки, отвечающий за компоновку компонента
Как правило, вы получаете точный размер компонента с помощью метода getSize (), который возвращает объект Dimension, содержащий ширину и высоту, но getWidth / Height () также должна работать. Но это может сработать, только если выполнено одно из двух предварительных условий. Если окно никогда не делалось видимым, не имеет менеджера компоновки или компонент (вы хотите знать размер) был добавлен после того, как окно / контейнер стало видимым, размер обычно равен нулю.
Таким образом, чтобы получить правильный размер, вы должны сделать контейнер / фрейм видимым (после добавления компонента) или вызвать validate () или doLayout () для контейнера, чтобы пересчитать компоновку, если вы добавили компонент после последний макет был сделан. Еще одна вещь, которую нужно иметь в виду, это настройка и, возможно, настройка менеджера компоновки на контейнере. Если менеджер макета не установлен (null), то даже если сделать контейнер видимым, или вызов validate () не устанавливает размер для его дочерних элементов.
Свойства минимума / предпочтительного размера / максимумаSize являются подсказками для менеджера макета, того, как компонент должен иметь размеры, но он не должен подчиняться им (большинство менеджеров макета этого не делают).
Редактировать 2: После прочтения вашего другого вопроса по той же теме, я думаю, вам следует прочитать Использование менеджеров по макету из Учебников по Java
Редактировать: Я не знаю, если вы уже поняли это, но чтобы отреагировать на изменение размера окна, вы можете сделать что-то вроде этого:
public class WindowResizeTest extends JFrame {
public static void main(String[] args) {
new WindowResizeTest();
}
public WindowResizeTest() {
this.setSize(640, 480);
JPanel panel = new JPanel();
panel.setBackground(Color.RED);
this.add(panel);
this.addComponentListener(new ComponentListener() {
public void componentResized(ComponentEvent e) {
System.out.println(e.getComponent().getSize());
}
public void componentHidden(ComponentEvent e) {}
public void componentMoved(ComponentEvent e) {}
public void componentShown(ComponentEvent e) {}
});
this.setVisible(true);
}
}