好吧,伙计们,我在尝试为一个在文本形式下运行良好的程序构建 GUI 时完全迷惑了自己。
该程序本质上是跟踪库存。产品名称、编号、成本、数量等。最初,我只是有一个“Items”类,它涵盖了所有 getter 和 setter。然后,我将使用扫描仪等来提示基于文本的菜单,您将非常系统地输入每个元素。我明白这一切是如何运作良好的,因为我可以实例化一个 Items 数组,其中存储了我可以操作的所有 Item 对象。然而所有这些都发生在 main() 中。
现在我另外创建了一个 Inventory 类,它处理我的 main() 和之前处理的大部分内容。我想创建一个“Inventory”对象,然后我可以在整个程序中使用它,主要是在我的 ActionListeners 中。 IE。库存.displayText(位置);不幸的是,因为我的 GUI 是与 main() 不同的类(我在 main() 中实例化 Inventory 类),所以我没有本地变量“inventory”,因此出现错误。
这看起来应该非常简单,但我的大脑似乎无法理解它。
这个想法是这样的:
public class Items{
all item variables
setters and getters()
}
<小时/>
public class Inventory{
Items[] arrayOfItems = new Items[10]
displayItem(int placement){
...code to display items
}
}
<小时/>
public class GUI extends JFrame{
public GUI(){
...general gui layout...
forwardButton = new JButton("Forward");
}
private class eventHandler implements ActionListener{
@Override
public void actionPerformed(ActionEvent event) {
int placement = 1;
if (event.getSource()==forwardButton){
if (placement < 10){
placement++;
inv.displayItem(placement); //this is where the problem is and where I
} //have lost myself. inv doesnt exist here.
//so i cant call upon the object from here.
<小时/>
public class Company{
public static void main(String args[]){
//Open GUI
GUI mainGUI = new GUI();
mainGUI.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainGUI.setSize(1000,1000);
mainGUI.setVisible(true);
//initialize inventory object
Inventory inv = new Inventory();
}
}
我几乎 100% 确定它是非常基本的东西,但我只是不明白。如果你们能帮助我,我将不胜感激!
最佳答案
您说得非常正确,您无权访问eventHandler
中的库存对象。 ,但解决这个问题相当容易。 eventHandler
是 GUI
的内部类。事实证明,在 Java 中,非静态内部类可以访问封闭类的成员(有关更多信息,请参阅 Nested Classes)。这意味着您在 GUI
中声明的任何内容将在 eventHandler
中可见.
您需要做的是创建 GUI
的成员类型 Inventory
,并传递您的inv
当您创建 GUI
时的实例。此时您的eventHandler
就能看到它。
您的GUI
构造函数看起来像这样...
public class GUI extends JFrame {
private Inventory inv;
public GUI(Inventory inv) {
this.inv = inv;
// other stuff
}
// etc
...然后在你的 main()
中方法,您可以传递对 inv
的引用像这样的构造函数:
public class Company{
public static void main(String args[]){
//initialize inventory object
Inventory inv = new Inventory();
//Open GUI
GUI mainGUI = new GUI(inv);
//etc
}
}
关于java - 调用另一个类中实例化的对象的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24817541/