0

我正在为我的一个类编写原始地址簿的代码,我们需要为地址簿本身使用一个类,然后使用另一个类来放入新条目。我明白这一点,但是当我调用输入新联系人的类方法时,我想更改 GUI。我正在使用 JFrame,因此对于我的 GUI 基础,我使用的是contentPane. 在我的第一堂课中,我contentPane用一个基本的 GUI 创建了我的:

public class Address extends JFrame implements ActionListener
{
    Container contentPane;

    public Address()
    {
        super();
        contentPane = getContentPane();
        contentPane.setLayout(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setTitle("Address Book");
        setSize(775,775);
        setLocation(0,0);
        setBackground(Color.BLUE);
    }
}

现在在我的第二节课中,输入一节,我想清除contentPanewith contentPane.removeAll()

class Entries
{
    public void newContact()
    {
        contentPane.removeAll();
    }
}

不幸的是,我的班级条目中没有任何内容可以识别contentPane以及我正在尝试修改的其他变量。有没有一种特殊的方法来命名contentPane类地址中的变量和其他变量,以便它们在条目中可用,或者我需要重新创建变量吗?

4

3 回答 3

1

当您创建一个对象时,Entries您需要给它一个对该Address对象的引用,以便您可以使用它的变量。我不确定你的程序布局是如何设置的,但如果Entries是在Address你调用的内部创建的,Entries entry = new Entry(this);或者它是从父类到两个类的,你需要设置变量......

Address address = new Address();
Entries entry = new Entry(address);

关于如何在条目中访问它的代码:

class Entries
{
    private Address reference;

    public Entries(Address reference) {
        this.reference = reference;
    }

    public void newContact()
    {
        reference.contentPane.removeAll();
    }
}
于 2013-01-25T15:06:12.730 回答
0

您需要一个引用来访问东西,或者您复制变量并在 Entries 构造函数中提供 contentPane :

private Container contentPane;

public Entries(Container contentPane) {
    this.contentPane = contentPane;
}

或者,您在 Address 类中的 contentPane 上创建一个 getter 并传递 contentPane。

在我看来,这两种解决方案都很糟糕,也许您应该考虑为您的条目类扩展一个 JPanel,并将条目添加到您的主 contentPane,然后您将能够在条目类中执行您想要的任何 UI 内容。

于 2013-01-25T15:06:46.253 回答
0

您需要将 contentPane 的引用作为构造函数 arg 传递给 Entries,或者将 contentPane 属性(getter,setter)添加到 Entries。

于 2013-01-25T15:05:29.743 回答