需要 JButton 事件支持

2023-11-29

我最近回答了一个关于如何在另一个类的主方法中打开登录面板的问题。 因为我还没有上过任何 Swing 课程(只有基本的 Java 编程),所以我已经偶然发现了另一个问题。

我如何检测用户是否按下了 JPanel 中的按钮并使其执行某些操作。

例如: 用户按下登录 -> if (textfield1.getText() == "user"){ 打开另一个 JFrame } -> 等等。

这是我的主要代码:

import java.awt.*;
import javax.swing.*;

public class Corendon {

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

    private static void showLogin(){
        Login login = new Login();

        JFrame loginFrame = new JFrame();
        loginFrame.add(login);
        loginFrame.pack();
        loginFrame.setLocationRelativeTo(null);
        loginFrame.setVisible(true);
        loginFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }
}

这是登录类:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Daan
 */
public class Login extends javax.swing.JPanel {

    /**
     * Creates new form Login
     */
    public Login() {
        initComponents();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNINGds: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jPasswordField1 = new javax.swing.JPasswordField();
        jTextField1 = new javax.swing.JTextField();
        jComboBox1 = new javax.swing.JComboBox();
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();

        jLabel1.setIcon(new javax.swing.ImageIcon("C:\\Users\\Daan\\Dropbox\\HvA\\Programming\\Corendon\\corendon.png")); // NOI18N

        jLabel2.setText("Username");

        jLabel3.setText("Password");

        jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Dutch", "English" }));

        jButton1.setText("Login");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jButton2.setText("Cancel");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                        .addGap(31, 31, 31)
                        .addComponent(jLabel1))
                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                        .addGap(45, 45, 45)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel2)
                            .addComponent(jLabel3)
                            .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(14, 14, 14)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addGap(29, 29, 29)
                                .addComponent(jButton2)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(jButton1))
                            .addComponent(jPasswordField1, javax.swing.GroupLayout.PREFERRED_SIZE, 214, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 214, javax.swing.GroupLayout.PREFERRED_SIZE))))
                .addContainerGap(22, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap(16, Short.MAX_VALUE)
                .addComponent(jLabel1)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel2)
                    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jPasswordField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel3))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jButton2)
                    .addComponent(jButton1))
                .addGap(35, 35, 35))
        );
    }// </editor-fold>                        

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         

    }                                        

    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JComboBox jComboBox1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JPasswordField jPasswordField1;
    private javax.swing.JTextField jTextField1;
    // End of variables declaration                   


}

所以我尝试在 Login.java 内部工作并使用作为事件处理程序的私有方法。我做了类似的事情:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    String user = jTextField1.getText();
    if(user == "user")  {
         jTextField1.setText("LOL");
    }
}  

只是为了测试它是否真的做了我想要的事情,但是当我按下按钮时它没有做任何事情。之后,我尝试在 main.java 中解决它,我实际上在其中创建了包含 JPanel 的框架。在阅读了大量教程之后,它们总是在同一个 java 文件中创建 JPanel 和 JButton 等(在我的例子中是 main.java)。

那么我如何检测登录按钮是否被按下,然后让它处理 JFrame 并继续使用另一个方法,在该方法中我创建另一个包含信息的 JFrame。

我希望我足够清楚,如果不清楚,请告诉我。

编辑: 当我将测试代码更改为: user.equals("user") 时,它确实有效。但现在我需要它来处理登录框架并访问 main.java 中的另一个方法。我如何从 Login.java 中的私有方法内部实现此目的?

提前致谢,


但现在我需要它来处理登录框架并访问另一种方法 在我的 main.java 中。我如何从私有方法中实现这一点 在Login.java中?

这里有一个设计问题。您不能调用任何框架的方法,因为您的ActionListener其范围仅限于Login控制板。怎么解决这个问题呢?实施ActionListener具有能见度足以处理框架。

Note:尽量避免使用 NetBeans GUI Builder(或任何 GUI 生成器)。这很容易,但与亲手制作相比,你会错过很多东西。您甚至可以编写更清晰的代码。但有必要了解一下布局管理器

代码示例:此示例说明了这样一个事实:您可以用不到一半的代码行来实现相同的目的。

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class Demo {    

    private void initGUI(){        

        final JTextField textField = new JTextField(20);
        final JFrame frame = new JFrame("Login");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);        

        JButton button = new JButton("Accept");        
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if("user".equals(textField.getText())){
                    frame.dispatchEvent(new WindowEvent(frame, WindowEvent.WINDOW_CLOSING));
                    // or simply frame.dispose()
                } else {
                    JOptionPane.showMessageDialog(null, "Wrong user! Keep trying.", "Login failed", JOptionPane.WARNING_MESSAGE);
                }
            }
        });

        JPanel login = new JPanel(new FlowLayout());
        login.add(new JLabel("User"));
        login.add(textField);
        login.add(button);

        frame.getContentPane().add(login);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }    

    public static void main(String[] args) {        
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Demo().initGUI();
            }
        });
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

需要 JButton 事件支持 的相关文章

随机推荐

  • 在 Ubuntu 上找不到 Tkinter 模块

    Python 2 7 1 r271 86832 Apr 11 2011 18 05 24 GCC 4 5 2 on linux2 Type help copyright credits or license for more informa
  • 加载自定义 True Type 字体

    在 Mac Firemonkey 应用程序 Delphi XE7 中 如何加载自定义 TrueType 字体 对于 Windows 我的应用程序安装程序将我的字体添加到 Windows 本身 我已经使用 FPC Lazarus 完成了此操作
  • 如何在搜索时添加加载图标? (Vue.js 2)

    我的组件是这样的
  • 内存对齐的目的

    不可否认 我不明白 假设您有一个内存 其内存字长度为 1 字节 为什么不能在未对齐地址 即不能被 4 整除 上的单次内存访问中访问 4 字节长的变量 就像对齐地址的情况一样 现代处理器上的内存子系统仅限于以其字大小的粒度和对齐方式访问内存
  • 强制 UITableView 滚动到顶部?

    如果 tableview 包含的单元格少于 10 个左右 您将如何强制 UITableViewCell 滚动到顶部 当 tableview 处于编辑模式时 我支持在 tableView 单元格中编辑托管对象上下文 不用说 如果单元格位于表格
  • 使用 for 循环迭代数据集 TF 2.0

    这个问题是关于如何迭代 TF 数据集 因为make initializable iterator 已弃用 我使用以下函数读取数据集 def read dataset new filename target delay ds tf data
  • 为什么 toPrecision 返回一个字符串?

    查看这段代码 function testprecision var isNotNumber parseFloat 1 3 toPrecision 6 alert typeof isNotNumber gt string 我本来预计会有一个数
  • spring集成sftp主机:写入文件失败;嵌套异常为 3:权限被拒绝

    我正在尝试使用 Spring 集成 sftp outbound gateway 将 sftp 文件发送到大型机 这是配置
  • 页面对象模式和替代方案

    当您自动化 Web UI 测试时 您希望组织您的测试 以便它们可维护并尽可能减少代码重复 要去的路上是页面对象模式 您在现实世界的项目中尝试过吗 还有其他选择吗 如何对复杂的网站进行建模 很少的嵌套母版页 弹出窗口 具有疯狂验证的大型表单
  • 如何在flutter中实现下拉列表?

    我有一个位置列表 我想在 Flutter 中将其实现为下拉列表 我对这门语言很陌生 这就是我所做的 new DropdownButton value selectedLocation onChanged String newValue se
  • 解决方案 - 实体类型 ApplicationUser 不是当前上下文模型的一部分

    我将这个问题作为文档发布 因为我花了很多时间才找到这个简单的问题 我正在使用 VS15 生成的原始 MVC 项目并尝试对其进行修改 错误 InvalidOperationException 实体类型 ApplicationUser 不是当前
  • MSDOS“你好世界”EXE

    我想编译一个 Hello World MS DOS exe 不是在 XP 16 位模式或 Windows 操作系统之上的 MS DOS 模式下运行的程序 我可以在我的 MS DOS 机器上运行的 HELOWRLD EXE I think D
  • 如何在 SQLite 中获取行号?

    我读过很多关于如何在 SQLite 中使用行号的文章 但没有一篇文章给了我我需要的答案 我知道如何使用此查询选择行号 SELECT SELECT COUNT FROM table WHERE title lt t title OR titl
  • 只能选择一个复选框

    我想一次只选择一个复选框 我的程序从文本文件中读取并根据文本文件中有多少个 答案 创建复选框 有谁知道代码有什么问题吗 public partial class Form1 Form string temp questions txt pu
  • @State 和 @StateObject 有什么区别

    我创建了一个这样的模型 import Foundation class Play ObservableObject Published var name String Tayle Published var age Int 12 它将在两个
  • MySQL选择查询以根据列表值获取记录

    我正在使用MySQL 我有 3 个表如下 表 subject Master subjectId subjectShortName 1 English 2 French 3 German 4 Latin 表 class Master clas
  • HighCharts xAxis - 月份的刻度间隔

    我正在尝试绘制样条图通过 失败的测试用例数量并根据它们进行分组小时 日期 月 年我得到这个值作为不规则系列 即 如果是小时 数据将无法在所有 24 小时内可用 其他分组的情况也是如此 由于数据不规则 需要 x 轴刻度间隔为月 已尝试使用 d
  • jquery和bootstrap之间的冲突

    我有一个代码 其中包含 jquery 文件和 bootstrap 文件在 header php 中 我遇到的问题是 如果我在 bootstrap js 文件之前包含 jquery 文件 它会弄乱网页上的其他选项卡 基本上即使我单击其他选项卡
  • 使用循环将输出打印到 Knit 中

    为这个问题道歉 我确信答案很简单 我有几个包含对象的列表 我通过knitr 将它们运行到HTML 中 并希望控制输出的顺序 此代码打印所有 list1 输出 然后打印所有 list1 绘图 然后打印所有 list2 输出 然后打印所有 li
  • 需要 JButton 事件支持

    我最近回答了一个关于如何在另一个类的主方法中打开登录面板的问题 因为我还没有上过任何 Swing 课程 只有基本的 Java 编程 所以我已经偶然发现了另一个问题 我如何检测用户是否按下了 JPanel 中的按钮并使其执行某些操作 例如 用