【问题标题】:Add an External Frame in a JDesktopPane Java在 JDesktopPane Java 中添加外部框架
【发布时间】:2013-03-10 07:16:41
【问题描述】:

我有一个名为“Menu_Project”的框架。

我有另一个名为“Main_Menu”的框架,其中有一个 JButton,单击该按钮后,我想在 JDesktopPane 中调用框架“Menu_Project”。我尝试在此链接上关注 YouTube 上的教程:https://www.youtube.com/watch?v=TUL3qEoZkR4

当我运行它时,我得到:

 " Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: adding a window to a container"

我的代码:

import java.awt.BorderLayout;


public class Menu extends JFrame {

private JPanel contentPane;
private JDesktopPane desktopPane;
private JButton btnNewButton;
private Menu_Modifications_Single m1; //The Frame to be added
/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                Menu frame = new Menu();
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the frame.
 */
public Menu() {
    initComponents();
    createEvents();
}
private void initComponents(){
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 1706, 995);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);

    btnNewButton = new JButton("Analyze Single");


    desktopPane = new JDesktopPane();
    desktopPane.setBackground(SystemColor.window);
    GroupLayout gl_contentPane = new GroupLayout(contentPane);
    gl_contentPane.setHorizontalGroup(
        gl_contentPane.createParallelGroup(Alignment.LEADING)
            .addGroup(Alignment.TRAILING, gl_contentPane.createSequentialGroup()
                .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(desktopPane, GroupLayout.PREFERRED_SIZE, 1597, GroupLayout.PREFERRED_SIZE))
            .addGroup(gl_contentPane.createSequentialGroup()
                .addContainerGap()
                .addComponent(btnNewButton)
                .addContainerGap(1496, Short.MAX_VALUE))
    );
    gl_contentPane.setVerticalGroup(
        gl_contentPane.createParallelGroup(Alignment.LEADING)
            .addGroup(gl_contentPane.createSequentialGroup()
                .addComponent(btnNewButton)
                .addGap(18)
                .addComponent(desktopPane, GroupLayout.DEFAULT_SIZE, 823, Short.MAX_VALUE))
    );
    GroupLayout gl_desktopPane = new GroupLayout(desktopPane);
    gl_desktopPane.setHorizontalGroup(
        gl_desktopPane.createParallelGroup(Alignment.LEADING)
            .addGap(0, 1597, Short.MAX_VALUE)
    );
    gl_desktopPane.setVerticalGroup(
        gl_desktopPane.createParallelGroup(Alignment.LEADING)
            .addGap(0, 823, Short.MAX_VALUE)
    );
    desktopPane.setLayout(gl_desktopPane);
    contentPane.setLayout(gl_contentPane);
}
private void createEvents(){
    btnNewButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            if(m1==null){
            m1 =  new Menu_Modifications_Single();
            desktopPane.add(m1);

            }
        }
    });

}
}

谁能指出哪里错了。我正在关注视频教程。

【问题讨论】:

    标签: java swing jframe grouplayout jdesktoppane


    【解决方案1】:

    您应该在JDesktopPane 中使用轻量级JInternalFrame,而不是JFrame

    您可以轻松 修改你的代码:

    if(m1==null){
        m1 =  new Menu_Modifications_Single();
        desktopPane.add(m1);
    }
    

    收件人:

    if(m1==null){
        m1 =  new Menu_Modifications_Single();
        JInternalFrame iFrame = 
                new JInternalFrame("Internal Frame", true, true, true, true);    
                /* give the same contents of m1 */
        iFrame.setContentPane(m1.getContentPane());    
                /* additional Integer argument, required by JDesktopPane
                  (although not strictly required) */
        desktopPane.add(iFrame, new Integer(0));    
    }
    

    【讨论】:

    • 我在看这个例子:java2s.com/Tutorial/Java/0240__Swing/… 但是如何向它添加另一个框架的实例。卡住了
    • 仅在这一行出现错误:iFrame.setRootPane 它以红色突出显示。
    • 它说什么? (希望你明白,这是我的大脑......没有测试。)
    • JInternalFrame 类型的方法 setRootPane(JRootPane) 不可见
    • 好的,改了一点。看看吧。
    猜你喜欢
    • 1970-01-01
    • 2012-06-29
    • 1970-01-01
    • 2023-03-16
    • 2015-01-14
    • 1970-01-01
    • 2012-09-22
    • 2016-05-10
    • 1970-01-01
    相关资源
    最近更新 更多