У меня есть простой графический интерфейс с контейнером, использующий GridLayout Manager.Я добавил два компонента, которые наследуются от JComponent и рисуют некоторые вещи на экране, используя paintComponent.
Теперь я добавил componentListener для изменения размера графического интерфейса с помощью GridLayout Manager.После изменения размера два компонента по-прежнему невелики, поэтому не изменили размер.
Я проверил это, создав простую копию GridLayout, распечатав размер, который метод layoutContainer получает из родительского контейнера, чтобы узнать, имеет ли родительский размер новый размер.(после изменения размера события).Он печатает все еще небольшой размер с небольшим изменением, но не правильным.
Я печатаю размер в layoutContainer и печатаю размер моего родительского интерфейса каждую секунду, используя простой таймер.
Я понял, что до того, как Timer напечатает правильный размер (1600x1099), layoutContainer в моем GridLayout Manager вызывается со старым размером.
Я думал, что GridLayout всегда автоматически изменяет размер всех своих компонентов в соответствии со строкамии конфигурация cols.Но, похоже, это не так, метод layoutContainer просто вызывается слишком рано.
Есть ли какой-то способ сделать это правильно с помощью GridLayout Manager, или мне нужно изменить размеры своих компонентов самостоятельно?
Как я могу проверить, когда и что вызывает метод layoutContainer в LayoutManager?
Вот код одного модуля, размер которого корректно изменяется, но его подкомпонент, являющийся подклассами, не изменяется правильно (надеюсь, это не слишком много кода для вас):
Информация: я написал все необходимые классы для этого модуля в одном Java-файле, поэтому у меня есть все, что мне нужно в одном Java-файле.
public class Main extends Module {
// ############### MAIN PAGE COMPONENT ##############
public class MainPage extends ModulePageContainer {
// ############### CLOCK COMPONENT ##############
public class ClockComponent extends JComponent {
private Date currentDateTime;
private SimpleDateFormat dateFormat;
public ClockComponent() {
this.dateFormat = new SimpleDateFormat( "HH:mm");
}
@Override
protected void paintComponent( Graphics g) {
super.paintComponent( g);
//...doing some paint stuff here...
}
public void setDateTime( Date dateTime) {
this.currentDateTime = dateTime;
}
}
// ############### CLOCK COMPONENT END ##############
// ############### MAIN INFO COMPONENT ##############
public class MainInfoComponent extends JComponent {
public MainInfoComponent() {
this.setLayout( null);
}
@Override
protected void paintComponent( Graphics g) {
super.paintComponent( g);
// ... just empty subcomponent ...
}
}
// ############### MAIN INFO COMPONENT END ##############
private ClockComponent clock;
private MainInfoComponent mainInfo;
public MainPage( Module parent) {
super( parent);
this.clock = new ClockComponent();
this.mainInfo = new MainInfoComponent();
this.setLayout( new MyGridLayout( 2, 1));
this.add( this.clock);
this.add( this.mainInfo);
}
public void clockTick( Date date) {
this.clock.setDateTime( date);
this.repaint();
}
}
// ############### MAIN PAGE COMPONENT END ##############
public Main( String name) {
super( name);
}
@Override
public void init() {
// every module has pages, this module has only one page called 'main'
MainPage mainPage = new MainPage( this);
mainPage.setName( "main");
this.addPage( mainPage);
}
}