Окно в окне

Тема в разделе "Java", создана пользователем xKlonx, 7 дек 2009.

  1. xKlonx

    xKlonx Lotus team
    Lotus team

    Регистрация:
    10 сен 2009
    Сообщения:
    412
    Симпатии:
    0
    Здраствуйте!!!Народ может кто-то подскажет как можно сделать окно в окне?Тоесть как добавить дочернее окно в родительское?Заранее спасибо!
     
  2. Kmet

    Kmet Well-Known Member

    Регистрация:
    25 май 2006
    Сообщения:
    1.017
    Симпатии:
    1
  3. jCoder

    jCoder Гость

    Ну, если ты хочешь создать внутреннее окно (это называется виртуальный рабочий стол), то тебе нужно сделать следующее:
    В 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);
    }

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

    Вложения:

    • _______.rar
      Размер файла:
      74,2 КБ
      Просмотров:
      8
  4. xKlonx

    xKlonx Lotus team
    Lotus team

    Регистрация:
    10 сен 2009
    Сообщения:
    412
    Симпатии:
    0
    jCoder
    Да это именно то что нужно,спасибо!

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

Поделиться этой страницей