从另一个类中调用变量

时间:2013-01-25 15:01:13

标签: java eclipse class contentpane

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

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);
    }
}

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

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

不幸的是,我的班级中的任何内容都没有识别contentPane以及我试图修改的其他变量。是否有一种特殊的方法可以在类Address中命名contentPane和其他变量,以便它们可以在Entries中使用,或者我是否需要重新创建变量?

3 个答案:

答案 0 :(得分: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();
    }
}

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您需要一个访问内容的引用,要么复制变量并在Entries构造函数中提供contentPane:

private Container contentPane;

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

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

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