Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我怎样才能调用其他java类中的对象?_Java_Oop_Object_Invoke - Fatal编程技术网

我怎样才能调用其他java类中的对象?

我怎样才能调用其他java类中的对象?,java,oop,object,invoke,Java,Oop,Object,Invoke,我是java中OOP方法的新手,我的系统有一些问题。 我目前正在做一个简单的GUI系统。在jForm中,假设我必须将所有代码作为一种过程方法写在那里。但我想尝试在单独的类(OOP)中编写代码。在主窗体中,我所要做的就是调用我在另一个类上创建的方法。 但我的主要问题是如何从一个窗体调用或调用一个对象到另一个类 这里有一个例子 public void checkUser(){ try { sql = "SELECT accessLevel FROM user_accounts

我是java中OOP方法的新手,我的系统有一些问题。 我目前正在做一个简单的GUI系统。在jForm中,假设我必须将所有代码作为一种过程方法写在那里。但我想尝试在单独的类(OOP)中编写代码。在主窗体中,我所要做的就是调用我在另一个类上创建的方法。 但我的主要问题是如何从一个窗体调用或调用一个对象到另一个类

这里有一个例子

public void checkUser(){
    try {
        sql = "SELECT accessLevel FROM user_accounts WHERE userName = 'admin'";
        stmt = conn.createStatement();
        rs = stmt.executeQuery(sql);
        rs.first();
        int accessLvl = rs.getInt(1);
        if (accessLvl != 1){
            btnAddUser.setEnabled(false);
            jPanel3.setEnabled(false);
        }
    }
    catch(Exception e){
        JOptionPane.showMessageDialog(null, "Exception on Verifying User");
    }
}

我希望将此方法(
checkUser()
)写入另一个类中,而不是将其放入主窗体中。但我的问题是我无法访问在主窗体中启动的对象
btnAddUser
(按钮名称)和
JPanel13
(面板名称)。如果我将直接使用,我将如何访问这些对象,以便访问其他类。

您的
checkUser
方法应该:

  • 接受作为要检查的用户名的参数(执行此操作时,将
    java.sql.Statement
    替换为
    java.sql.PreparedStatement
  • 返回一个布尔值,调用代码(表单)根据需要使用该布尔值来启用或禁用组件
  • 抛出调用代码(表单)可以捕获并显示消息对话框的异常
OOP的另一个特点是关注点的分离——表单处理UI,类使用
checkUser
方法处理用户身份验证

另一方面,像
checkUser
这样的函数通常会在身份验证失败时抛出异常。这是因为使用该方法的人很容易无法检查返回值并允许未经验证的用户进入系统

但我的问题是我无法访问在主窗体中启动的对象btnAddUser(按钮名)和JPanel13(面板名)

您需要将其声明为类中的类变量,分配适当的值,然后实例化该类以检索值


正如Nick所说,您需要在逻辑上分离代码,这将使整个设计模块化。在这里,您可以将数据库代码移动到一个单独的
DataAccess
类中,并公开查询方法。连接对象可以在构造函数中创建。

您可以将此方法作为静态方法写入另一个类,如下所示,该类接受两个参数,一个是JButton,另一个是JPanel

 public static void checkUser(JButton btnAddUser,JPanel jPanel3){
   try {
      sql = "SELECT accessLevel FROM user_accounts WHERE userName = 'admin'";
      stmt = conn.createStatement();
      rs = stmt.executeQuery(sql);
      rs.first();
      int accessLvl = rs.getInt(1);
      if (accessLvl != 1){
          btnAddUser.setEnabled(false);
          jPanel3.setEnabled(false);
      }
  }
  catch(Exception e){
    JOptionPane.showMessageDialog(null, "Exception on Verifying User");
  }
}

您可以从之前编写代码的地方调用此方法,如

 NewClass.checkUser(btnAddUser,jPanel3);
NewClass是您编写此checkUser()方法的类


您还需要将参数传递给方法,如sql字符串、语句和ResultSet对象,或者将它们声明为静态对象,这样您就可以使用类名轻松地在任何地方访问它们。

这可能会提供一些见解,让您走上正确的道路。还有很多不同的解决方案和教程。

感谢您的回答。。。我包含了方法
checkUser(connectionconn,stringuser){…}的参数
我已经编写了这样的代码来调用对象<代码>myMainClass.btnAddUser.setEnabled(false)