[英]How to access an object within another class (Java)
这是我的代码的简化版本:
public class ColorFactory extends JFrame {
public ColorFactory(){
buildTopPanel();
}
public void buildTopPanel(){
JPanel topPanel = new JPanel();
this.add(topPanel, BorderLayout.NORTH);
}
}
如您所见,我有一个在调用时创建新JPanel对象的方法。 如何从另一个类访问该特定的JPanel对象? 我有一个按钮侦听器类,我想从ColorFactory类外部更改JPanel的颜色。 该代码就在ColorFactory类之后。
public class ButtonListener implements ActionListener{
public void actionPerformed(ActionEvent e) {
//Change JPanel color here.
}
}
仅在ColorFactory构造函数中实例化JPanel然后通过那里进行访问会更好吗?
对于初学者,您需要将JPanel设置为ColorFactory中的一个字段,因此退出buildTopPanel()时对它的引用不会消失。 保存对它的引用后,便有两种选择。 从设计的角度来看,错误的选择是公开它,例如:
JPanel getTopPanel(){
return topPanel;
}
更好的选择是让您的动作侦听器向ColorFactory
发送一条消息,说“ respondToButton(Color newColor)”,然后让ColorFactory
决定更改topPanel的颜色。例如:
public void respondToButton(Color newColor){
topPanel.setBackground(newColor);
}
您正面临设计问题; 通常,这种情况需要更多调查,以了解如何最终获得一个干净且可维护的设计。 但是,对于您要报告的特定问题,我将:
ButtonListener
的构造函数,该构造函数接收一个可以访问所需信息的参数(即ColorFactory
),以便可以在ButtonListener
本身中初始化一个字段 ColorFactory
创建方法changeColor
。 这种方法实际上会应用颜色变化 ButtonListener
,调用changeColor
场上,即参照ColorFactory
您应该将JPanel设置为此类的字段:
public class ColorFactory extends JFrame {
JPanel topPanel;
public ColorFactory(){
buildTopPanel();
}
public void buildTopPanel(){
topPanel = new JPanel();
this.add(topPanel, BorderLayout.NORTH);
}
public void changeColor(Color color) {
//color changing code here
}
}
现在您可以从另一个类获取JPanel。 现在要做的就是将ColorFactory
放入Button侦听器中:
public class ButtonListener implements ActionListener{
ColorFactory colorFactory;
public ButtonListener(ColorFactory colorFactory) {
this.colorFactory = colorFactory;
}
public void actionPerformed(ActionEvent e) {
colorFactory.changeColor(/* color here */);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.