Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.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 只有在成功登录数据库验证后,才能打开JFrame。使用Eclipse?_Java_Eclipse_Swing_Jframe - Fatal编程技术网

Java 只有在成功登录数据库验证后,才能打开JFrame。使用Eclipse?

Java 只有在成功登录数据库验证后,才能打开JFrame。使用Eclipse?,java,eclipse,swing,jframe,Java,Eclipse,Swing,Jframe,我要做的是,只有在连接的数据库中验证了登录信息之后,才能从登录屏幕打开一个主应用程序 使用Eclipse,到目前为止我拥有的: java:使用UCanAccess连接到MS Access数据库。(成功) java:扩展JFrame的登录窗口。当输入用户名和密码时,将使用数据库对其进行验证。(成功) java:主应用程序窗口,我希望只有使用正确的用户名和密码才能访问该窗口。不扩展JFrame,但其中包含JFrame 现在,我已经能够设置它,这样,如果输入的用户名和密码是正确的,就会弹出一个窗口说“

我要做的是,只有在连接的数据库中验证了登录信息之后,才能从登录屏幕打开一个主应用程序

使用Eclipse,到目前为止我拥有的:

java:使用UCanAccess连接到MS Access数据库。(成功)

java:扩展JFrame的登录窗口。当输入用户名和密码时,将使用数据库对其进行验证。(成功)

java:主应用程序窗口,我希望只有使用正确的用户名和密码才能访问该窗口。不扩展JFrame,但其中包含JFrame

现在,我已经能够设置它,这样,如果输入的用户名和密码是正确的,就会弹出一个窗口说“成功登录”。但是,如何设置它,以便在成功登录后打开Home.java

我已经看过了: -我已经在我家尝试了setVisible,但是Eclipse返回一个错误,说在家中创建setVisible方法…我以为这应该是一个自动控件?尝试创建该方法后,会出现更多问题

-这建议添加actionListener,然后将其设置为可见..我已经这样做:
public void actionPerformed(ActionEvent e){this.setVisible(false);new Home().setVisible(true);
但是Eclipse根本没有打开登录窗口。起初,我认为这可能是因为我的成功消息在actionListener中,但是即使删除了它,它仍然不起作用

而且-我唯一的结论是,这不起作用,因为Home.java不扩展JFrame?但是,我通过其他来源了解到,使用“扩展JFrame”是不好的

我想我也不了解“扩展JFrame”与类中新JFrame之间的区别?我一直在自学java,对GUI的创建也不熟悉。也许我遗漏了一些非常明显的东西,但我就是找不到解决方案

有什么想法吗?谢谢

为了给大家一个想法,my Home.java是这样开始的:

public class Home {

    private JFrame frame;
    private JTable data;
    private JTextField Column1;
    private JTextField Column2;
    private JTable table;

    // Launch the application.

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Areas window = new Areas();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    // Create the application.

    public Home() {
        initialize();
    }

    //Initialize the contents of the frame.

    private void initialize() {


        frame = new JFrame();
        frame.setBounds(100, 100, 697, 518);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

只需在Home类中创建一个将其JFrame设置为可见的方法:

public void setJFrameVisible(boolean visible)
{
    frame.setVisible(visible);
}
然后,假设您的Home类实例被称为“Home”,您所要做的就是:

home.setJFrameVisible(true);

让我再添加一点上下文。在扩展JFrame时,该类继承JFrame类的所有方法/属性。这就是为什么在扩展JFrame时可以调用obj.setVisible(true),因为您的类继承了JFrame类的setVisible方法。您拥有的是一个包含JFrame的类,因此您必须在内部JFrame而不是类上调用setVisible方法。

首先定义一个简单的工作流,该工作流允许您理解希望代码采用的逻辑路径

分解责任范围,使对象只做它们绝对必须做的工作,例如,登录组件只应从用户收集凭据,而不负责验证凭据,这应该是某种控制器的责任

同样,登录组件或其控制器都不应负责确定成功登录后发生的事情,即另一个控制器的责任

这将使代码解耦并鼓励重用,因此下次需要呈现一些“登录”视图时,您不必重新编码整个内容,只需根据需要更新控制器、模型和/或视图,或按原样重新使用它


Swing中控制器的概念与普通MVC实现略有不同,因为Swing已经是MVC的一种形式

相反,我倾向于在控制器和视图之间定义一个契约,描述视图生成的事件(以及控制器可以预期的事件),例如
attemptLogin
。这将断开控制器与视图实现的连接,因此视图可以自由地以任何方式形成视图,只要它想验证它调用的实际凭据
attemptLogin

因此,您可以从一个“主控制器”开始,它负责控制登录和主应用程序控制器。它定义登录和主应用程序之间的工作流,并监视控制器可能生成的适当事件,以决定下一步应该做什么

基本的操作流程可能类似于


这一概念在

Ok great中得到了演示,编辑成功了。必须先在登录代码中创建一个新框架,然后在新创建的框架上使用setJFrameVisible。首先定义一个简单的工作流程,让您能够理解希望代码采用的逻辑路径。分解职责范围,以便您能够ts只做他们绝对必须做的工作,例如,您的登录组件应该只从用户收集凭据,它应该负责验证凭据,这应该是某种控制器的责任。同样,登录组件或它的控制器都不应该负责确定发生了什么ns成功登录后,这是另一个控制器的责任,因为我从中得到的是,控制器的想法是将责任分配给实际的鼠标单击。因此,例如,当单击登录按钮时,它应该发送某种信号,然后验证输入的凭据?这不是已经在做的吗e?我不认为我看到了区别,或者这仅仅是为了通过分解职责来保持代码更具组织性?Swing中的控制器的概念与普通MVC实现略有不同,因为Swing已经是MVC的一种形式。相反,我倾向于在控制器和视图之间定义一个契约描述什么是夏娃