2015-10-01 2 views
0

Проблема в том, что когда я пытаюсь максимизировать JFrame, кадр становится максимальным, но размер содержимого сохраняется.Java Swing JFrame свести/увеличить размер ошибки

http://i.imgur.com/7q5Yh9F.png

Мой главный класс рама:

private CardLayout layout; 

private SettingsFrame settingsFrame; 

private Container contentPane; 
Frame frame = this; 

private ApplicationFrame() {  
    contentPane = getContentPane(); 
    layout = new CardLayout(); 
    contentPane.setLayout(layout); 
    initializeFrame(); 
    settingsFrame = new SettingsFrame(model); 
    initializeMenuBar(); 
    initializePanels();     
    showPage(FIRST_PAGE); 
    this.addWindowStateListener(listener); 
} 

public SettingsFrame getSettingsFrame() { 
    return settingsFrame; 
} 

private void initializeFrame() { 
    this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
    this.setTitle(APPLICATION_TITLE); 
    this.settingsFrame = new SettingsFrame(model); 
    this.setSize(1400, 900); 
    this.setLocationRelativeTo(null); 
}  

private void initializePanels() { 
    add(new Panel(), FIRST_PAGE); 
    add(new Panel(), SECOND_PAGE); 
    add(new Panel(), THIRD_PAGE); 
}  

Я попытался сделать слушателя, поймать событие разворачивания и там я попробовал:

revalidate(); 
repaint(); 

также

invalidate(); 
validate(); 

, но без прецедентов.

я узнал, что:

frame.setExtendedState(JFrame.MAXIMIZED_BOTH); 

является corectly максимизации рамы, но я не могу использовать это слушатель, так как событие разворачивания уже произошло.

+2

Для лучшей помощи рано, опубликовать [MCVE] или [Short, самодостаточный, Правильный пример] (http://www.sscce.org/). –

ответ

3

Вы используете CardLayout, который, к сожалению, не позволит вам изменить размер JComponent. Поскольку CardLayout может удерживать/управлять одним или несколькими компонентами, которые используют одно и то же пространство дисплея.
Вы должны добавить JPanel и установить расположение этой панели на CardLayout, если хотите.

Я настоятельно рекомендую прочитать следующую документацию: A Visual Guide to Layout Managers

+2

(1+) Да, диспетчер макета по умолчанию для панели содержимого JFrame является BorderLayout. Когда вы добавляете компонент в «CENTER» BorderLayout, компонент получает все пространство, доступное для фрейма. Поэтому оставьте макет только панели содержимого и добавьте панель с помощью CardLayout в панель содержимого кадра. – camickr

Смежные вопросы