IllegalStateException错误.用GroupLayout()覆盖组件时 [英] IllegalStateException Error. While outlaying components with GroupLayout()

查看:127
本文介绍了IllegalStateException错误.用GroupLayout()覆盖组件时的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

java的GUI新手,我正在尝试使用GroupLayouts来布局图形组件,但我做错了什么,但不知道是什么.我找不到导致此错误的原因.迫切需要帮助.

New to GUI in java, I am trying out GroupLayouts to layout graphical components, I am doing something wrong, but no Idea what. I can't find what's causing this error. Help is desperately needed.

线程"main"中的异常线程"AWT-EventQueue-0"中的异常java.lang.IllegalStateException:

Exception in thread "main" Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException:

at javax.swing.GroupLayout.checkComponents(Unknown Source)
at javax.swing.GroupLayout.prepare(Unknown Source)
at javax.swing.GroupLayout.layoutContainer(Unknown Source)
at java.awt.Container.layout(Unknown Source)
at java.awt.Container.doLayout(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validate(Unknown Source)
at java.awt.Container.validateUnconditionally(Unknown Source)
at java.awt.Window.show(Unknown Source)
at java.awt.Component.show(Unknown Source)
at java.awt.Component.setVisible(Unknown Source)
at java.awt.Window.setVisible(Unknown Source)
at AlignTest.main(AlignTest.java:12)

java.lang.IllegalStateException:

java.lang.IllegalStateException:

这是代码:

import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;enter code here
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;


public class AlignFrame extends JFrame {


    private JTextField xTField;
    private JTextField yTField;

    private JLabel xLabel;
    private JLabel yLabel;

    private JCheckBox sToGr;
    private JCheckBox showGrid;

    private JButton okButton;
    private JButton cancelButton;
    private JButton helpButton;

    public AlignFrame()
    {
        super("Align");
        GroupLayout layout = new GroupLayout(getContentPane());
        getContentPane().setLayout(layout);

        xLabel = new JLabel("X: ");
        yLabel = new JLabel("Y: ");

        xTField = new JTextField("");
        yTField = new JTextField("");

        sToGr= new JCheckBox("Snap to Grid");
        showGrid = new JCheckBox("Show Grid");

        okButton = new JButton("OK");
        cancelButton = new JButton("Cancel");
        helpButton = new JButton("Help");

        layout.setAutoCreateContainerGaps(true);
        layout.setAutoCreateGaps(true);

        layout.setHorizontalGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
                        .addComponent(sToGr)
                        .addComponent(showGrid)
                        )
                .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
                        .addGroup(layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
                                        .addComponent(xLabel)
                                        .addComponent(yLabel))
                                .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
                                        .addComponent(xTField)
                                        .addComponent(yTField))
                                )
                        )
                .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
                        .addComponent(okButton)
                        .addComponent(cancelButton)
                        .addComponent(helpButton))
                );

        layout.setVerticalGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
                        .addComponent(sToGr)
                        .addComponent(showGrid)
                        )
                .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
                        .addComponent(xLabel)
                        .addComponent(yLabel))
                .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)                     
                        .addComponent(okButton)
                        .addComponent(cancelButton)
                        .addComponent(helpButton))

                );
    }

}


####################################################################
############### AlignTest class that contains main #################
####################################################################

import javax.swing.JFrame;


public class AlignTest {

    public static void main(String [] args)
    {
        AlignFrame test = new AlignFrame();

        test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        test.setSize(500, 500);
        test.setVisible(true);


    }

}

推荐答案

实际异常包含相关信息:

The actual exception contains the relevant information:

java.lang.IllegalStateException:javax.swing.JTextField [ ...这里很多垃圾... ]未附加到垂直组

java.lang.IllegalStateException: javax.swing.JTextField[...lotsa garbage here...] is not attached to a vertical group

您正在打电话

layout.setHorizontalGroup(...)

layout.setVerticalGroup(...)

但是在后者中,没有出现JTextField(xTFieldyTField).尽管可以通过插入这些行来修复" ...

But in the latter, the JTextFields (xTField and yTField) are not appearing. Although this can be "fixed" by inserting these lines...

...
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
    .addComponent(xLabel)
    .addComponent(yLabel)
    .addComponent(xTField) // <---
    .addComponent(yTField) // <---
)

在垂直小组中,我强烈建议您看看

in the vertical group, I'd strongly recommend you to have a look at http://docs.oracle.com/javase/tutorial/uiswing/layout/index.html . Maybe I'm just not a great fan of "Visual GUI editors", but I think you should only use them when you can be sure that nobody ever has to look at the code again. (This rarely happens - draw your conclusions...)

这篇关于IllegalStateException错误.用GroupLayout()覆盖组件时的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆