我正在为我的一个类编写原始地址簿的代码,并且要求我们为地址簿本身使用一个类,然后使用另一个类来放入新的条目。我理解这一点,但是当我调用类方法输入新的联系人时,我想更改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中使用,或者我是否需要重新创建变量?
答案 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内容