gpt4 book ai didi

java.lang.IllegalArgumentException : adding a window to a container

转载 作者:行者123 更新时间:2023-12-02 05:36:24 25 4
gpt4 key购买 nike

当我调用frame.add(this)时,我收到“java.lang.IllegalArgumentException:向容器添加窗口”。我做错了什么,以及如何修复该错误。提前致谢。

public class mainclass extends JFrame{

private static final long serialVersionUID = 1L;

private int width = 400;
private int height = 400;

public static JFrame frame;

public static void main(String args[]) {
frame = new JFrame();

mainclass mainclass = new mainclass();
mainclass.createFrame();
}

public void createFrame() {
frame.setSize(new Dimension(width, height));
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.add(this); // this is where the error occurs
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.setIconImage(new ImageIcon("res/icon.png").getImage());
}
}

堆栈跟踪:

Exception in thread "main" java.lang.IllegalArgumentException: adding a window to a container
at java.awt.Container.checkNotAWindow(Unknown Source)
at java.awt.Container.addImpl(Unknown Source)
at java.awt.Container.add(Unknown Source)
at javax.swing.JFrame.addImpl(Unknown Source)
at java.awt.Container.add(Unknown Source)
at test.mainclass.createFrame(mainclass.java:27)
at test.mainclass.main(mainclass.java:21)

最佳答案

简单的答案是你不能这样做。如果描述您想要这样做的原因,您的问题将受益匪浅 - 您想要实现什么最终结果?

如果您尝试添加另一个容器,那么您应该使用 JPanel s。如果您正在尝试创建类似 MDI 的应用程序,那么您应该查看 JInternalFrame s。如果你想要一个弹出框架,你需要 JDialog s。

更多信息,JFrame 被设计为顶级容器 - 它们包含一个 JRootPane 作为其唯一的子项。当您想要向框架添加某些内容时,您实际上是在向框架的根 Pane (称为“内容 Pane ”)添加内容。正确的方法是调用frame.getContentPane().add()

这一直是令人沮丧的根源,因为许多开发人员本能地想要调用frame.add(),这实际上是所有其他 Swing 组件的工作方式。因此,为了方便起见,frame.add() 已被重写以调用 frame.getContentPane().add()

因此,如果您考虑一下示例中现在发生的情况,您将尝试将 JFrame 添加到框架的根内容 Pane 中。可以理解的是,根 Pane 不能将其他顶级容器作为子元素,例如 JFrame,因为它们拥有自己的根 Pane 。

关于java.lang.IllegalArgumentException : adding a window to a container,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24927826/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com