我怎么可能在其他java类中调用/调用对象?

时间:2013-01-16 11:30:57

标签: java oop object invoke

我是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(面板名称)。如果我将直接使用我怎么可能访问这些对象,以便我访问其他类。

4 个答案:

答案 0 :(得分:0)

您的checkUser方法应该:

  • 接受一个要检查的用户名参数(当您执行此操作时,将java.sql.Statement替换为java.sql.PreparedStatement。)
  • 返回一个布尔值,调用代码(您的表单)用于根据需要启用或禁用组件。
  • 抛出调用代码(您的表单)可以捕获并显示消息对话框的异常。

除其他事项外,OOP是关于关注点的分离 - 您的表单处理UI,具有checkUser方法的类处理用户身份验证。

顺便说一句,像checkUser这样的函数通常会抛出异常,因为身份验证失败了。这是因为使用该方法的人很难检查返回值并允许未经身份验证的用户进入系统。

答案 1 :(得分:0)

  

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

您需要在类中将其声明为类变量,分配正确的getter and setter methods,然后实例化此类以检索值。

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

答案 2 :(得分:0)

您可以将此方法作为静态写入另一个类,如下所示,如果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 string,Statement和ResultSet对象等方法,或者将它们声明为静态,以便您可以使用类名轻松访问它们。

答案 3 :(得分:0)

tutorial可能会提供一些见解并让您走上正确的道路。那里有更多不同的解决方案和教程。