1

我有一个 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);
}
}
4

3 回答 3

0

最可能的原因是BorderLayout. ABorderLayout在其每个位置中只能包含一个组件。如果您不指定位置,CENTER则将使用该位置。

因此,如果您的ListObjects班级和ListAndModifyCustomer班级都在add没有指定位置的情况下进行调用,则只有第二个组件可见(并添加)。

于 2012-09-13T06:13:19.660 回答
0

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

于 2012-09-12T16:19:29.627 回答
0

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

于 2012-09-17T05:10:40.280 回答