嗨,我正在使用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);似乎是"无法共享BoxLayout"错误的触发因素。如果我将Jframe的布局更改为Flowlayout,则应用于firstrow部分的嵌套盒layout工作正常?
有人可以帮忙吗?
更改以下内容:
BoxLayout layout = new BoxLayout(this, BoxLayout.Y_AXIS);
:
BoxLayout layout = new BoxLayout(getContentPane(), BoxLayout.Y_AXIS);
产生错误的代码将Jframe传递到BoxLayout的构造函数中,作为BoxLayout使用容器,而实际上不是。实际上,您将布局添加到Jframe的contentpane,而不是Jframe。
顺便说一句,您可能会通过让您的班级扩展Jframe,迫使您创建和显示Jframes,而通常需要更灵活的情况。实际上,我会冒险,我创建和我所看到的大多数摇摆GUI代码都不是扩展Jframe,实际上很少会想做这。更常见的是,您的GUI课程将旨在创建JPANELS,然后将其放入Jframes或Jdialogs或Jtabbedpanes中,或者在需要的任何地方通过卡套件交换。这将大大提高您的GUI编码的灵活性。