Окно в окне

xKlonx

Well-Known Member
Lotus team
10.09.2009
410
0
31
Украина, Киев
#1
Здраствуйте!!!Народ может кто-то подскажет как можно сделать окно в окне?Тоесть как добавить дочернее окно в родительское?Заранее спасибо!
 
J

jCoder

Гость
#3
Ну, если ты хочешь создать внутреннее окно (это называется виртуальный рабочий стол), то тебе нужно сделать следующее:
В java jdk_1.4, в пакете javax.swing, добавлены классы JInternalFrame(внутреннее окно) и JDesktopPane(виртуальный рабочий стол)... Берёшь объявляешь в своём классе поле типа JDesktopPane:

Твой_Класс {
...
JDesktopPane desktop; // допустим

...

// далее идет...
Конструктор_класса() { // или метод инициализации
...
// прописываешь
desktop = new JDesktopPane();

// обычно такое действие как открытие внутреннего окна цепляют за
// каким нибудь событием, например нажатие кнопки или открытие главной формы,
// таким образом, лучше всего создать метод инициализации внутреннего окна, который
// будет вызываться при генерации события.
// к примеру нажатие кнопки:
openBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
createFrame(0, 0, splitPane, 942, 455, "База данных"); // метод инициализации внутреннего окна
}
});
...
}

// метод инициализации может быть в следующей форме...
// к примеру:
private void createFrame(int posX, int posY, Container c, int width, int hight, String caption) {
// первые два параметра этого метода, координаты левого верхнего угла внутр. окна,
// "с" - это контейнер который будет содержаться в твоём окне (это может быть например панелька
// с текстовыми полями, областями, там кнопками и т.д. или допустим какая нибудь сплит-панель)

// Первое, что делаешь, создаёшь экземпляр твоего внутреннего окна
JInternalFrame j = new JInternalFrame(caption, false, true, true, true); // caption - это заголовок окна
// "логика" - это меняет ли
// размеры окно, сворачивается,
// разворачивается, закрывается
и т.д.
// И начинаешь его инициализировать
j.setBorder(BorderFactory.createRaisedBevelBorder()); // это, чтобы окно было выпуклым
j.setBounds(posX, posY, width, hight); // потом устанавливаешь позицию окна и размеры
j.setContentPane©; // затем устанавливаешь контейнер

// также у внутреннего окна можно перехватывать события, например открыть/закрыть окно
j.addInternalFrameListener(new javax.swing.event.InternalFrameAdapter() {
public void internalFrameOpened(InternalFrameEvent e) {
/*код*/
};
public void internalFrameClosed(InternalFrameEvent e) {
/*код*/ }
});

// после того как окно готово, добавляешь его к виртуальному рабочему столу (desktop)
// причем добавляещь как обычную панель...
desktop.add(j, BorderLayout.CENTER);
// и затем выводишь окно на экран.
j.show();
}

...
// и в конце уже твоего конструктора формы добавляешь свой виртуальный рабочий стол к главной форме.
contentPane.add(desktop);
...
this.setSize(950, 640);
this.setResizable(false);
this.setJMenuBar(menuBar);
this.setVisible(true);
}

Наднюсь, я помог :offtop:
 

Вложения

xKlonx

Well-Known Member
Lotus team
10.09.2009
410
0
31
Украина, Киев
#4
jCoder
Да это именно то что нужно,спасибо!

Kmet
Тебе тоже большое спасибо за полезную ссылочку!