2015-01-10 2 views
0

Когда я начал разрабатывать свое приложение, я только что разработал рамки Seprate JFrame и протестировал их один за другим. Теперь я хочу создать главное окно для своего приложения. Я много читал, но до сих пор мне трудно делать это в java и качели. Я попробовал это, создав главное окно как экземпляр JFrame, но я получил ошибки, которые показывают, что я не могу показать JFrame внутри другого JFrame.Сделать главное окно для приложения JAVA/SWING

public class MainWindow extends JFrame{ 
private JFrame frame1; 
private JFrame frame2; 


public MainWindow(){ 

frame1 = new JFrame(); 
frame2 = new JFrame(); 

setLayout(new BorderLayout()); 

add(frame1,BorderLayout.CENTER); 
add(frame2,BorderLayout.NORTH); 

pack(); 

} 

} 

ответ

1

Это одна из причин, почему обычно не рекомендуется распространяться непосредственно из контейнеров верхнего уровня, таких как JFrame, они блокируют вас в одном месте.

Вы не можете добавлять компоненты на основе окон в другие контейнеры. Вам нужно будет отделить каждый из ваших текущих кадров в более базовый контейнер, например JPanel, только после этого вы можете добавить их в другое окно.

Вы можете использовать CardLayout или JTabbedPane или даже JDesktopPane или другой менеджер компоновки, чтобы ваши индивидуальные просмотры были доступны вашим пользователям в зависимости от ваших потребностей.

См ...

еще несколько идей

1

A JFrame это окно.

Вы не можете поместить окно в окно.

Возможно, вы ищете JPanel. A JPanel - довольно простой контейнер для других компонентов (который может включать в себя больше JPanel с). Вы можете добавить JPanel s в JFrame.

+0

я хочу, чтобы добавить entrie JF rame внутри панели или Parent JFrame, как я могу это сделать? –

+0

@abdouamer Как сказал immibis, вы не можете. Вот почему мы препятствуем людям продлеваться с «JFrame», поскольку он блокирует вас в реализации.Вместо этого используйте «JPanel» и либо «CardLayout», либо «JTabedPane» (или даже другой менеджер макетов), чтобы отображать отдельные представления ... – MadProgrammer

0

Существуют различные способы, чтобы справиться с этой
Прежде всего вы не можете использовать JFrame внутри JFrame, как вы заметили, так что вместо этого использовать JPanel

panel = new JPanel(); 

add(panel,BorderLayout.Center); 

JPanel является другой контейнер, в котором вы можете упаковать много компонентов качания.

Если вы хотите открыть новое окно, сделайте anoter JFrame и сделайте его видимым. Обратите внимание: вы не можете добавить его в Jframe с помощью метода add. но вы можете сохранить его в переменной и обработать то, что вы видите в другом кадре из того же класса.
Как вы хотите иметь MainWindow добавить этот код в MainWindow:

frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 

это делает, что если вы закроете ваш главный кадр приложение завершится (в других кадрах вы не должны выполнять это нормально)