当前位置: 首页 > 知识库问答 >
问题:

在JDesktopPane中添加外部帧Java

伊铭
2023-03-14

我有一个叫做“菜单项目”的框架。

我有另一个称为"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);

            }
        }
    });

}
}

谁能指出我错在哪里。我下面的视频教程。

共有1个答案

濮阳研
2023-03-14

您应该在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));    
}
 类似资料:
  • 我在我的Minecraft客户端中有一个函数,它需要一个外部库。我在IDE中添加了它,并将其添加到lib/文件夹中,但它没有帮助。有人对此有经验吗?它们是两个罐子。

  • 因此,我对Java相当陌生,我正在尝试将这个库添加到我的项目中。问题是Android studio 0.3.6没有一种简单的方法来实现这一点,我搜索的所有答案要么引用了旧版本的Android studio,要么描述了如何导入外部项目(源代码,而不是jar文件)。 在阅读了一点之后,我得出的结论是,手动添加jar文件将是最好的方法(手动复制/粘贴和gradle编辑),但正如我所说,我对这项技术相当陌

  • 在NetBeans 8.2中,我如何正确地向库中添加外部.jar? 我正在做一个使用.jsp文件制作的web应用程序,运行在Tomcat服务器上(到目前为止是本地的)。我使用的是Maven,我想我对所有的第三方JAR都有问题,因为我也尝试添加JSON库,但也不起作用。我还尝试通过工具->Libraries->Add jar/folder等添加这些库,NetBeans显示它们已添加,但在我的Java

  • 问题内容: 我正在使用maven构建可执行的jar文件,这意味着您可以使用“ java -jar file.jar”运行它。 我想依靠用户定义的属性(只是一个包含键/值的文件),在开发阶段,我将“ user.properties”文件放在maven / src / main / resources /文件夹中。 我的属性文件已加载: 现在,我想将该文件保留在JAR之外,并具有以下内容: 我尝试使用

  • 我刚刚开始使用servlet和JSP开发在线应用程序。您可能知道,我们需要一个doPost方法,它接收HttpServletRequest请求、HttpServletResponse(Response)参数。 我的问题如下。我知道我需要导入javax.servlet和javax.servlet.http.*包才能使其工作。我记得有一次,一个疯狂的老师告诉我,我可以修改我的jdk/jre/lib文件