BoxLayout不能共享错误?

时间:2015-05-09 12:51:38

标签: java swing jframe boxlayout

您好,我正在开发一个Java应用程序,下面是一个名为Gui的自定义类的摘录,它扩展了JFrame:

public Gui(){
    super("EVC Scan & Price");
    setSize(400,500);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setResizable(false);
    // GridLayout layout = new GridLayout(5,1);
    BoxLayout layout = new BoxLayout(this, BoxLayout.Y_AXIS);
    setLayout(layout);

    //add header row
    headerRow.setAlignmentX(Component.CENTER_ALIGNMENT);
    BorderLayout layoutHeading = new BorderLayout();
    headerRow.setLayout(layoutHeading);
    if (headerImg != null){
    ImageIcon icon = new ImageIcon(headerImg);
    picLabel.setIcon(icon);}
    headerRow.add(picLabel, BorderLayout.NORTH);
    title.setAlignmentX(JLabel.CENTER_ALIGNMENT);
    headerRow.add(title, BorderLayout.SOUTH);
    add(headerRow);

    //add first row
    firstRow.setAlignmentX(Component.LEFT_ALIGNMENT);
    BoxLayout layoutRow1 = new BoxLayout(firstRow,BoxLayout.Y_AXIS);
    firstRow.setLayout(layoutRow1);
    firstRow.add(catLabel);
    scroll.setSize(390,100);
    firstRow.add(scroll);
    add(firstRow);

    setVisible(true);
}

我已阅读了很多教程和api,但实际上看不出有什么问题,不过行读:add(headerRow);似乎是#Box的触发器; BoxLayout无法共享"错误。 如果我将JFrame的布局更改为flowlayout,应用于firstRow部分的嵌套boxlayout工作正常吗?

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:3)

改变这个:

BoxLayout layout = new BoxLayout(this, BoxLayout.Y_AXIS);

到此:

BoxLayout layout = new BoxLayout(getContentPane(), BoxLayout.Y_AXIS);

产生错误的代码将JFrame作为BoxLayout使用容器传递给BoxLayout的构造函数,而事实上并非如此。实际上,您将布局添加到JFrame的contentPane而不是JFrame。

顺便说一句,你可能会让你的角度扩展JFrame,迫使你创建和显示JFrame,这通常需要更多的灵活性。事实上,我冒昧地说,我创建的大部分Swing GUI代码和我见过的扩展了JFrame,事实上你很少想做这个。更常见的是,您的GUI类将面向创建JPanels,然后可以将其放置到JFrames或JDialogs或JTabbedPanes中,或者在需要时通过CardLayouts交换。这将大大提高GUI编码的灵活性。