при нажатии кнопки должно открыться новое окно (внутренний фрейм), что не так с моим кодом? - PullRequest
0 голосов
/ 01 декабря 2011

при нажатии кнопки, должно открыться новое окно (внутренний фрейм), что не так с моим кодом? Может кто-нибудь объяснить связь между Desktopane и InternalFrame и просто обычная панель контента?

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

public class tuna extends JFrame{

    private JButton button1;
    JDesktopPane desktop;
    JInternalFrame internalFrame;


    public tuna(){
        super("iLyrics");

        desktop = new JDesktopPane();
        add(desktop);

        button1 = new JButton("Open Internal Frame");
        add(button1);

        button1.addActionListener(

                new ActionListener() {
                    public void actionPerformed(ActionEvent e) {

                              JInternalFrame internalFrame = new JInternalFrame("Internal Frame", true, true, true, true );
                              internalFrame.setBounds(110, 130, 105, 70);                 
                              desktop.add(internalFrame, JLayeredPane.DEFAULT_LAYER);
                              //desktop.add(internalFrame);
                              internalFrame.setVisible(true);

                    }
                });
    }
}
    }

Ответы [ 3 ]

1 голос
/ 02 декабря 2011

Похоже, вы добавляете рабочий стол и кнопку в ЦЕНТР панели содержимого, делая кнопку заменой панели рабочего стола, поэтому вы никогда ее не увидите.

    // put the desktop in the center
    desktop = new JDesktopPane(); 
    getContentPane().add(desktop, BorderLayout.CENTER);

    // but the button at the top
    button1 = new JButton("Open Internal Frame"); 
    getContentPane().add((button1, BorderLayout.NORTH); 
0 голосов
/ 02 декабря 2011

добавить этот код после создания jinternaframe:

internalFrame.setBounds(110, 130, 105, 70);                 
desktopPane.add(internalFrame, JLayeredPane.DEFAULT_LAYER);
0 голосов
/ 01 декабря 2011

Я не верю, что вы можете добавить рамку на панель. Если вы посмотрите на иерархию свинг-контейнеров. Было бы пойти Label -> Pane -> Frame. Я думаю, что проблема с вашим кодом, когда вы делаете

desktop.add(internalFrame);

Я бы изменил рабочий стол на новый JFrame

desktop = new JFrame();

http://docs.oracle.com/javase/tutorial/uiswing/components/toplevel.html

В этой записи рассказывается о ваших отношениях с контейнерами верхнего уровня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...