在 JDialog 中添加组件时出错
Error adding component in a JDialog
我创建了一个 JDialog
,其中包含组件(JLabel
s、JButton
s、JTextField
s 等),我还有另一个 JDialog
除此之外,我想在第一个 JDialog
中添加一些组件,所以在第二个 JDialog
中,我尝试使用 .add()
方法添加组件,但是当我 运行 程序时是一个错误....
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException
at org.netbeans.lib.awtextra.AbsoluteLayout.addLayoutComponent(Unknown
Source)
at java.awt.Container.addImpl(Container.java:1127)
at java.awt.Container.add(Container.java:1005)
at javax.swing.JDialog.addImpl(JDialog.java:921)
at java.awt.Container.add(Container.java:417)
at mainJFrame.initComponents(mainJFrame.java:721)
at mainJFrame.<init>(mainJFrame.java:30)
at mainJFrame.lambda$main[=10=](mainJFrame.java:1980)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
at java.awt.EventQueue.access0(EventQueue.java:97)
at java.awt.EventQueue.run(EventQueue.java:709)
at java.awt.EventQueue.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
我会放一部分代码,特别是我收到错误的部分。
private void initComponents() {
practiceModeConfig = new javax.swing.JDialog(this);
//Here it supossed to go the declarations of the swings components
//(JLabels, Buttons,...) everything here is correct, so i dont
// want to put on here....
practiceModeConfig.setUndecorated(true);
practiceModeConfig.setDefaultCloseOperation(
javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
practiceModeConfig.setBackground(new java.awt.Color(242, 176, 53));
practiceModeConfig.setBounds(new java.awt.Rectangle(444, 308, 0,
0));
practiceModeConfig.setSize(new java.awt.Dimension(400, 300));
practiceModeConfig.getContentPane().setLayout(new
org.netbeans.lib.awtextra.AbsoluteLayout());
//This is a JSlider that i want to add in the next JDialog
practiceModeConfig.getContentPane().add(Slider, new
org.netbeans.lib.awtextra.AbsoluteConstraints(50, 410, 250, -1));
//And this is the other JDialog....
testModeConfig = new javax.swing.JDialog(this);
testModeConfig.setUndecorated(true);
testModeConfig.getContentPane().setLayout(new
org.netbeans.lib.awtextra.AbsoluteLayout());
testModeConfig.setDefaultCloseOperation(
javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
testModeConfig.setBackground(new java.awt.Color(242, 176, 53));
testModeConfig.setBounds(new java.awt.Rectangle(444, 308, 0,
0));
我想使用第一个 JDialog
中的 JSlider
组件执行此操作,但我收到了上述错误....
testModeConfig.getContentPane().add(Slider, new
org.netbeans.lib.awtextra.AbsoluteConstraints(50, 410, 250, -1));
org.netbeans.lib.awtextra.AbsoluteConstraints(50, 410, 250, -1));
我猜“-1”是个问题。
我不使用 AbsoluteLayout,但我认为该值应该代表组件的 "height"。
在任何情况下,您都可以阅读 API 的 AbsoluteConstraints class 以了解该参数应该是什么。
我真正的建议是不要使用 AbsoluteLayout 或 IDE 的表单生成器。 Swing 旨在与布局管理器一起使用,因此您应该使用布局管理器(或多个布局管理器)创建表单,它将根据您的要求进行布局。
阅读 Layout Managers 上的 Swing 教程部分,了解更多信息和工作示例以帮助您入门。
我创建了一个 JDialog
,其中包含组件(JLabel
s、JButton
s、JTextField
s 等),我还有另一个 JDialog
除此之外,我想在第一个 JDialog
中添加一些组件,所以在第二个 JDialog
中,我尝试使用 .add()
方法添加组件,但是当我 运行 程序时是一个错误....
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException
at org.netbeans.lib.awtextra.AbsoluteLayout.addLayoutComponent(Unknown
Source)
at java.awt.Container.addImpl(Container.java:1127)
at java.awt.Container.add(Container.java:1005)
at javax.swing.JDialog.addImpl(JDialog.java:921)
at java.awt.Container.add(Container.java:417)
at mainJFrame.initComponents(mainJFrame.java:721)
at mainJFrame.<init>(mainJFrame.java:30)
at mainJFrame.lambda$main[=10=](mainJFrame.java:1980)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
at java.awt.EventQueue.access0(EventQueue.java:97)
at java.awt.EventQueue.run(EventQueue.java:709)
at java.awt.EventQueue.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
我会放一部分代码,特别是我收到错误的部分。
private void initComponents() {
practiceModeConfig = new javax.swing.JDialog(this);
//Here it supossed to go the declarations of the swings components
//(JLabels, Buttons,...) everything here is correct, so i dont
// want to put on here....
practiceModeConfig.setUndecorated(true);
practiceModeConfig.setDefaultCloseOperation(
javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
practiceModeConfig.setBackground(new java.awt.Color(242, 176, 53));
practiceModeConfig.setBounds(new java.awt.Rectangle(444, 308, 0,
0));
practiceModeConfig.setSize(new java.awt.Dimension(400, 300));
practiceModeConfig.getContentPane().setLayout(new
org.netbeans.lib.awtextra.AbsoluteLayout());
//This is a JSlider that i want to add in the next JDialog
practiceModeConfig.getContentPane().add(Slider, new
org.netbeans.lib.awtextra.AbsoluteConstraints(50, 410, 250, -1));
//And this is the other JDialog....
testModeConfig = new javax.swing.JDialog(this);
testModeConfig.setUndecorated(true);
testModeConfig.getContentPane().setLayout(new
org.netbeans.lib.awtextra.AbsoluteLayout());
testModeConfig.setDefaultCloseOperation(
javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
testModeConfig.setBackground(new java.awt.Color(242, 176, 53));
testModeConfig.setBounds(new java.awt.Rectangle(444, 308, 0,
0));
我想使用第一个 JDialog
中的 JSlider
组件执行此操作,但我收到了上述错误....
testModeConfig.getContentPane().add(Slider, new
org.netbeans.lib.awtextra.AbsoluteConstraints(50, 410, 250, -1));
org.netbeans.lib.awtextra.AbsoluteConstraints(50, 410, 250, -1));
我猜“-1”是个问题。
我不使用 AbsoluteLayout,但我认为该值应该代表组件的 "height"。
在任何情况下,您都可以阅读 API 的 AbsoluteConstraints class 以了解该参数应该是什么。
我真正的建议是不要使用 AbsoluteLayout 或 IDE 的表单生成器。 Swing 旨在与布局管理器一起使用,因此您应该使用布局管理器(或多个布局管理器)创建表单,它将根据您的要求进行布局。
阅读 Layout Managers 上的 Swing 教程部分,了解更多信息和工作示例以帮助您入门。