按钮点击,新窗口(内部框架)应该打开,我的代码有什么问题?

时间:2011-12-01 18:56:34

标签: java swing

按钮点击,新窗口(内部框架)应该打开,我的代码出了什么问题? 有人可以解释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 个答案:

答案 0 :(得分:1)

看起来您正在将桌面和按钮添加到内容窗格的CENTER,使按钮替换桌面窗格,因此您永远不会看到它。

    // 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); 

答案 1 :(得分:0)

我不相信你可以在窗格中添加框架。如果你看一下摇摆容器的层次结构。它会去Label - >窗格 - >帧。我认为您的代码存在的问题是在您执行时

desktop.add(internalFrame);

我会将桌面更改为新的JFrame

desktop = new JFrame();

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

这篇文章谈到了你与顶级容器的关系。

答案 2 :(得分:0)

在创建jinternaframe后添加此代码:

internalFrame.setBounds(110, 130, 105, 70);                 
desktopPane.add(internalFrame, JLayeredPane.DEFAULT_LAYER);