swing 中的登录和注销[关闭]

2024-04-21

我制作了一个包含用户名和密码的表单...并提交按钮 因此,单击提交后...我必须在单独的程序中进行验证部分,当结果为true时将允许用户导航到内部主页...添加禁用登录页面。如果登录详细信息错误,它将显示消息对话框..显示错误的用户名和密码..

public void actionPerformed(ActionEvent ae)
{
    if (ae.getSource() == submit) 
    {
        //to do...
    }
}

由于不知道如何验证用户详细信息,因此可以肯定地说您不想在 EDT 上下文中调用它。

相反,我使用了SwingWorker为我做这项工作(你必须填写)。它只是返回一个true or false值返回到 EDT。

如果登录失败,我们只显示JOptionPane http://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html#features显示“登录失败”消息。否则我们可以简单地处理登录对话框......

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.EventQueue;
import java.awt.Frame;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.concurrent.ExecutionException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.SwingWorker;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class TestLogin {

    public static void main(String[] args) {
        new TestLogin();
    }

    public TestLogin() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                JDialog frame = new JDialog((Frame) null, "Login", true);
                frame.setLayout(new BorderLayout());
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);

                System.exit(0);
            }
        });
    }

    public class TestPane extends JPanel {

        public TestPane() {
            setLayout(new GridBagLayout());
            GridBagConstraints gbc = new GridBagConstraints();
            gbc.gridx = 0;
            gbc.gridy = 0;
            gbc.insets = new Insets(4, 4, 4, 4);
            gbc.anchor = GridBagConstraints.WEST;
            add(new JLabel("User Name:"), gbc);
            gbc.gridy++;
            add(new JLabel("Password:"), gbc);
            gbc.gridx++;
            gbc.gridy = 0;
            add(new JTextField(10), gbc);
            gbc.gridy++;
            add(new JPasswordField(10), gbc);

            JButton okay = new JButton("Okay");
            JButton cancel = new JButton("Cancel");

            gbc.gridx = 0;
            gbc.gridy++;
            gbc.anchor = GridBagConstraints.CENTER;
            add(okay, gbc);
            gbc.gridx++;
            add(cancel, gbc);

            okay.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    setFormEnabled(false);
                    new LoginWorker().execute();
                }
            });

            cancel.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    SwingUtilities.windowForComponent((Component) e.getSource()).dispose();
                }
            });
        }

        protected void setFormEnabled(boolean enabled) {
            for (Component comp : getComponents()) {
                comp.setEnabled(enabled);
            }
        }

        protected void loginSuccessful() {
            SwingUtilities.windowForComponent(this).dispose();
        }

        protected void loginFailed() {
            JOptionPane.showMessageDialog(this, "Login failed", "Fail", JOptionPane.ERROR_MESSAGE);
            setFormEnabled(true);
        }

        public class LoginWorker extends SwingWorker<Boolean, Void> {

            @Override
            protected Boolean doInBackground() throws Exception {
                boolean login = false;
                Thread.sleep(5000);
                login = (int) Math.round(Math.random() * 1) == 0 ? false : true;
                return login;
            }

            @Override
            protected void done() {
                try {
                    Boolean login = get();
                    if (login) {
                        loginSuccessful();
                    } else {
                        loginFailed();
                    }
                } catch (InterruptedException ex) {
                    ex.printStackTrace();
                    loginFailed();
                } catch (ExecutionException ex) {
                    ex.printStackTrace();
                    loginFailed();
                }
            }
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

swing 中的登录和注销[关闭] 的相关文章

  • 具有默认值的 Java JAX-RS 自定义参数

    假设我有这个 这只是一个示例 GET Path value address Produces application json public Response getAddress QueryParam user User user 用户是
  • 我在socket上设置了超时,发现这个值不能大于21

    我在socket上设置了超时 该值小于21秒才有效 21秒后发现超时还是21秒 public static void main String args SimpleDateFormat sdf new SimpleDateFormat yy
  • 位图内存不足错误

    我对这个错误有疑问 我从 URL 制作网站图标解析器 我这样做是这样的 public class GrabIconsFromWebPage public static String replaceUrl String url StringB
  • JavaFX 图像未在舞台中显示

    我尝试了很多次 尝试了很多方法 但都无法让自己的形象在舞台上如我所愿 我认为这可能与java寻找资源的路径有关 但我不确定 因为我刚刚开始使用视觉库 在本例中为JavaFX 这是我的目录结构 MyProject assets img myI
  • URL.setURLStreamHandlerFactory

    我正在使用带有嵌入式 Jetty 的可执行 jar 开发一个 Web 应用程序 我的jar包含一个依赖jar jar in jar 我参考了JarRsrcLoader and RsrcURLStreamHandlerFactory由 Ecl
  • 解决 Java Checkstyle 错误:名称 'logger' 必须匹配模式 '^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$'

    使用 Eclipse Checkstyle 插件我看到以下错误 名称 logger 必须匹配模式 A Z A Z0 9 A Z0 9 我通过更改解决了此错误 private static final Logger logger Logger
  • 在哪里可以获得有关 Java FitNesse 和 Slim 的一些教程? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • RMI 中的引用传递问题? [复制]

    这个问题在这里已经有答案了 有人可以告诉我我错在哪里 为什么这个 RMI 聊天应用程序不起作用 目标是通过远程对象或序列化对象实现客户端 服务器和逻辑之间的解耦 import javax swing import java awt even
  • 如何拦截 REST 端点以接收所有标头?

    我当前的代码是 Path login RequestScoped public class LoginResource GET SecurityChecked public Response getUser HeaderParam AUTH
  • Java-如何将黑白图像加载到二进制中?

    我在 FSE 模式下使用 Java 和 swing 我想将完全黑白图像加载为二进制格式 最好是二维数组 并将其用于基于掩码的每像素碰撞检测 我什至不知道从哪里开始 过去一个小时我一直在研究 但没有找到任何相关的东西 只需将其读入Buffer
  • 线程“main”中的异常 java.lang.StackOverflowError

    我有一段代码 但我无法弄清楚为什么它在线程 main java lang StackOverflowError 中给出异常 这是问题 Given a positive integer n prints out the sum of the
  • 异步迭代器

    我有以下代码 while slowIterator hasNext performLengthTask slowIterator next 由于迭代器和任务都很慢 因此将它们放入单独的线程中是有意义的 这是对迭代器包装器的快速而肮脏的尝试
  • Jenkins 的代码覆盖率 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 当您在数组列表上调用remove(object o)时,它如何比较对象?

    当您在 java 中的数组列表上调用remove object o 时 它如何比较对象以找到要删除的正确对象 它使用指针吗 或者它使用 Comparable 接口来比较对象吗 ArrayList remove 依赖于对象的实现Equal方法
  • 创建正则表达式匹配数组

    在Java中 我试图将所有正则表达式匹配返回到一个数组 但似乎您只能检查模式是否匹配某些内容 布尔值 如何使用正则表达式匹配来形成与给定字符串中的正则表达式匹配的所有字符串的数组 4城堡的回答 https stackoverflow com
  • 如何将 arraylist 从 servlet 传递到 javascript?

    我通过在属性中设置数组列表并将其转发到 jsp 来从 servlet 传递数组列表 Servlet ArrayList
  • 改变for循环的顺序?

    我遇到一种情况 我需要根据用户输入以不同的顺序循环遍历 xyz 坐标 所以我是 3D 空间中的一个区域 然后是一组像这样的 for 循环 for int x 0 x lt build getWidth x for int y 0 y lt
  • 警告:无法更改每个人的权限:

    当运行 Java 快速入门示例时https developers google com drive web quickstart java hl hu https developers google com drive web quicks
  • 对于当前月份和日期但年份不同的日期,经过的月份计算未给出正确的结果

    我正在尝试计算自特定日期以来经过的月份 该函数工作正常 尽管如果我将今天的日期与过去的不同年份放在一起 它会给我一个月的差异 不到一个月 假设对于所有日期 该函数都运行良好 除了 如果今天是 2014 03 06 YYYY MM DD 并且
  • 为什么范围为“provided”的依赖项会隐藏 Maven 中的传递依赖项?

    我的 Maven 项目中有三个模块 这稍微简化了 model包含JPA注释的实体类 坚持实例化一个实体管理器并调用它的方法 应用创建类的实例model 设置一些值并将它们传递给坚持 model and 坚持显然取决于javax persis

随机推荐

  • 如何使用python打字.注释?

    我很难理解文档 https docs python org 3 library typing html typing Annotated到底是什么typing Annotated非常适合在文档之外查找解释 示例 但更难 或者它 对某事有好处
  • 如何在网络浏览器上忽略 Control+C(复制)

    I m trying to ignore Ctrl C in my website but im stuck
  • ORA-29977: 保证模式下的查询注册不支持列类型

    我正在努力表演DatabaseChangeListener从我的 java 类中 我收到以下错误 ORA 29977 不支持查询注册的列类型 保证模式 我需要一个实现 每当表中插入新行时我都应该收到通知 这是我尝试过的代码 用于将更改通知给
  • 如何导航到新页面 React Router v4

    我正在构建一个加密货币市场应用程序来练习reactjs 当应用程序启动时 具有某些属性的货币列表将显示为列表 我需要导航到不同的页面 新页面 Currency组件 而不加载当前页面底部的组件 目前我能够将其呈现在页面底部 但这不是我需要的
  • 哪种函数式编程语言在 Eclipse 中提供最好的支持?

    作为一项练习 我的团队正在考虑学习函数式编程 选择一种语言的因素之一是它在 Eclipse 中的支持 任何带有 Eclipse 插件的语言都可以 但是哪种语言提供最好的免费插件呢 额外问题 该语言的最佳在线 书籍教程 我不知道它是否是最好的
  • 如何将新的 SomeFunction() 语法转换为 TypeScript?

    当尝试将简单的 JS 文件转换为禁用隐式 any 的 TS 时 出现以下错误 错误 TS7009 新 表达式 缺少构造函数签名 隐式具有 any 类型 interface Logger new any any Callable syntax
  • 为什么在 .NET 4 下运行时此行会导致 VerificationException?

    请帮助我 为什么此代码在 NET 4 0 下运行时会导致 VerificationException public T parseEnum
  • Gemfile - 将生产 gem 与开发 gem 分开

    所以我知道在 Gemfile 中我可以做这样的事情 group development test do gem gem1 gem gem2 end 我想要完成的是这样的事情 group production do gem gem1 gem
  • Xcode动态实时更新折线图

    我正在尝试创建一个折线图 在其中连续绘制数据 以便可以实时观察图表更新 每秒绘制大约 5 个点左右 我正在寻找的图表类似于此处显示的图表 https www vanmil org live heart rate with ios and m
  • 用 typescript 重新定义 window.console

    我的错误记录代码中有以下 javascript 它定义了console log for 某些浏览器不存在 https stackoverflow com questions 3326650 console is undefined erro
  • 如何更改 Java 文件的字体大小和字体颜色?

    如何从 Eclipse 中的 Java 文件而不是 XML 文件更改字体颜色 大小和按钮颜色 对于字体大小 您可以将其写为 tv setTextSize 20 0f 对于字体颜色 您可以将其写为 tv setTextColor Color
  • docker run 使用包含变量的 ENTRYPOINT

    我有一个私人 git 存储库github com http github com我想自动化docker build过程使用Dockerfile 我天真地认为最好的地方Dockerfile位于我的存储库的根文件夹中 例子 git clone
  • 尝试从文件创建 python 字典,但我不断收到“太多值无法解压”之类的错误

    我在记事本中保存了一个文本文件 但移到了我的 python 文件夹中 该文件夹左侧有一个国家 地区的三个字母缩写 右侧有大约四个或五个空格 它有与其对应的国家 地区 如下所示 AFG 阿富汗ARM亚美尼亚 etc 我需要字典使用三个字母作为
  • 如何防止在 Chrome 扩展程序中放大弹出窗口

    我刚刚注意到 如果我在选项卡中放大网页 通过执行 Ctrl Plus 然后打开弹出窗口对于我的 Chrome 扩展 它也得到了扩展 不幸的是 这使得它显示垂直滚动条 在更大的范围内 甚至显示水平滚动条 我发现其他扩展程序仅以 100 缩放显
  • 如何在 FakeHttpContext 中设置 Request.Header 进行单元测试

    我有一个假HttpContext我一直在尝试修改以包含一些用于测试目的的标头 public static HttpContext FakeHttpContext var httpRequest new HttpRequest http st
  • expo-auth-session 无法在 Android 独立应用程序上完成 Google 登录

    我正在使用 expo 开发一个反应本机应用程序 我用过expo auth session providers google包登录 它在世博环境中工作正常 但是当我为 Android 平台构建应用程序时 由于 google 登录未完成 因此不
  • Android - 将点击焦点设置在按钮上

    我的布局中有 4 个按钮 现在每当我单击任何按钮时 在单击事件之后 按钮应该突出显示 显示它是最后单击的 为了制作这样的东西 我尝试了以下方法 code btn1 setOnClickListener new button click li
  • 为什么 std::string("\x00") 报告长度为 0?

    我有一个需要对字符串进行编码的函数 它需要能够接受 0x00 作为有效的 字节 我的程序需要检查字符串的长度 但是如果我传入 x00 to std string the length 方法返回 0 即使字符串是单个空字符 如何获取实际长度
  • Ado.Net - 如何使用连接池?

    Net 允许连接池 根据我所读到的内容 只需向 App config 添加参数即可 问题是 我是否应该在代码中执行任何操作来使用连接池 在我的代码中 每次需要数据时我都会打开一个连接 并在完成后立即关闭它 我应该做一些特别的事情来重用连接吗
  • swing 中的登录和注销[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我制作了一个包含用户名和密码的表单