Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > MDI пример не работает


Автор: НовыйСтиль 2.1.2011, 11:55
Искал в нете пример, как сделать дочернии фреймы внутри родительского. В итоге нашёл такой пример:

Код

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Main extends JFrame
{
    Container container;
    JButton add;
    JToolBar toolbar;
    private JDesktopPane desktop;
    JPanel panel;
    public Main() 
    {
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        add = new JButton("Добавить");
        add.addActionListener(new myButtonAction());
        toolbar = new JToolBar(JToolBar.HORIZONTAL);
        toolbar.add(add);
        desktop = new JDesktopPane();
        add(BorderLayout.CENTER, desktop);
        add(BorderLayout.NORTH, toolbar);
        setMinimumSize(new Dimension(640, 480));
        setPreferredSize(getMinimumSize());
        setVisible(true);
    }
    public static void main(String[] args) 
    {
        new Main();
    }
    class myButtonAction implements ActionListener
    {
        public void actionPerformed(ActionEvent e) 
        {
            Internal internal = new Internal();
            desktop.add(internal);
            internal.show();
        }
    }
}


и дополнительный класс

Код

import java.beans.PropertyVetoException;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Internal extends JInternalFrame
{
    public Internal() 
    {
        super("internal", true, true, true, true);
        setMinimumSize(new Dimension(200, 100));
        setPreferredSize(getMinimumSize());
        setVisible(true);
        try 
        {
            setSelected(true);
        } 
        catch (PropertyVetoException ex) 
        {
        }
}

}


Я прошёлся по коду не понял почему не работает.

В итоге запускается окно с менюшкой. Есть кнопка добавить. На него навешано событие(в дебагире проверял, срабатывает). Но окно новое не появляется.

Автор: jk1 3.1.2011, 13:25
Новое окно появляется, в отладчике это видно. Другое дело, что оно не отрисовывается, вот исправленный вариант:
Код

public class Internal extends JInternalFrame {
    public Internal() {
        super("internal", true, true, true, true);
        setMinimumSize(new Dimension(200, 100));
        setPreferredSize(getMinimumSize());
        setVisible(true);
        try {
            setSelected(true);
        }
        catch (PropertyVetoException ex) {
        }

        this.pack();
    }
}


Да, кстати, вызов show() эквивалентен комбинации setVisible(true) + setSelected(true). Поэтому вызывать одно за другим особого смысла не имеет.

Автор: НовыйСтиль 3.1.2011, 18:04
спасибо, помогло.

Автор: НовыйСтиль 4.1.2011, 03:42
jk1, а какие книги можно почитать именно по Java GUI и Java FX? не отвлекаясь на основы Java.

Автор: jk1 4.1.2011, 11:39
НовыйСтиль, 

Этот вопрос недавно обсуждался http://forum.vingrad.ru/forum/topic-318913.html, там много ссылок на хорошие книги.
Сам я предпочитаю http://download.oracle.com/javase/tutorial/uiswing/, все-таки ман от производителя.

В любом случае, на основы лучше бы обратить внимание - это сэкономит Вам много часов на поиске глупых ошибок в коде. На собеседованиях, кстати, тоже любят спрашивать "из основ", так что знать такие вещи еще и выгодно по деньгам smile 

Автор: НовыйСтиль 4.1.2011, 14:50
у меня по основам от тэч есть видео уроки, там и по оконному программированию есть + потом аплеты.
если кому интересно будет, потом ссылку выложу.

да и устраиваться по яве пока не собираюсь, чисто сам на себя поработать
на работе я пишу на Delphi+Cache

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)