java - 调用另一个类中实例化的对象的方法

标签 java object user-interface

好吧,伙计们,我在尝试为一个在文本形式下运行良好的程序构建 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中的库存对象。 ,但解决这个问题相当容易。 eventHandlerGUI 的内部类。事实证明,在 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/

相关文章:

java - 基于另一个线程结果的数据库回滚

Javascript 变量对象键

javascript - 使用带有 .key 名称的键名访问 JSON 对象时出现问题但适用于 []

c++ - QLineEdit 圆角?

java - 为什么没有调用run方法?

java - Telegram API : How keep ApiState to save signIn state

java - 加密通过 Amazon S3 发送的大流

c# - 在 C# 中,如果将列表中的对象添加到另一个列表中,更改第二个列表中的对象是否会更改第一个列表中的同一对象?

user-interface - 如何从集成 VSCode 的终端隐藏主文件夹名称?

c# - 有没有办法在调试时查看 UI 更新?