2015-05-09 51 views
1

您好我工作的一个Java应用程序,以下是从所谓的GUI中的自定义类延伸JFrame中的摘录:BoxLayout不能共享错误?

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的布局更改为流布局,则应用于firstRow部分的嵌套boxlayout工作正常吗?

任何人都可以帮忙吗?

回答

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类将专门用于创建JPanel,然后可将其放置到JFrame或JDialogs或JTabbedPanes中,或在需要时通过CardLayouts进行交换。这将大大增加您的GUI编码的灵活性。