如何将组件添加到JFrame的子类的子类

时间:2012-09-12 15:10:14

标签: java swing jframe subclass jcomponent

我有一个JFrame A的子类。我有另一个类B,它是A的子类。我想像JButtons一样向框架B添加新组件。我的代码如下:

public B() extends A {
    //Calling super class constructor
    super();

    //Creating and adding a button 
    JButton btn = new JButton();
    this.add(btn);

    //other codes
}

当我显示框架时,不添加按钮,只显示超类框架及其组件。如何在子类B的框架中添加这些按钮?

更新:这是我的代码的精简版本。我在超类 ListObjects 中使用了BorderLayout。

package assignment2;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class ListAndModifyCustomer extends ListObjects {

public ListAndModifyCustomer() {
    //Calling super class constructor
    super("Customers");

    //Adding listener to the ok button
    super.selectBtn.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {

            //codes to create another JFrame

            dispose();  //Closing the frame
        }
    });

    //Adding button to the panel
    super.panel.add(new JButton("NO"));

    JPanel jp = new JPanel();
    jp.add(super.selectBtn);

    super.add(jp, BorderLayout.SOUTH);
}
}

3 个答案:

答案 0 :(得分:0)

执行this.getContentPane().add(btn)。由于没有关于使用哪些组件,布局等的信息,我无法评论更多。

答案 1 :(得分:0)

最可能的原因是BorderLayoutBorderLayout只能在其每个位置包含一个组件。如果您未指定位置,则会使用CENTER位置。

因此,如果您的ListObjects班级和ListAndModifyCustomer班级在未指定位置的情况下拨打add,则只有seceond组件可见(并已添加)。

答案 2 :(得分:0)

我发现如果我们在子类中创建一个面板并将所有项添加到该面板并将该面板添加到超类的框架中,则组件将变为可见。