当前位置: 首页 > 面试题库 >

需要JButton事件的支持

段干博涉
2023-03-14
问题内容

我最近有一个关于如何在另一个类的主方法中打开登录面板的问题。因为我还没有在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);

    }
}

这是Login类:

/*
 * 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文件(在我的情况下为main.java)中创建了JPanel和JButton等。

因此,我该如何检测是否按下了登录按钮,然后使其处理JFrame并转到另一个方法,在该方法中我创建另一个包含信息的JFrame。

我希望我足够清楚,否则请告诉我。

编辑:当我将测试代码更改为:user.equals(“
user”)时,它确实起作用。但是现在我需要它来配置Login框架并访问main.java中的另一个方法。如何从Login.java中的私有方法内部实现此目标?

提前致谢,


问题答案:

但是现在我需要它来配置Login框架并访问main.java中的另一个方法。如何从Login.java中的私有方法内部实现此目标?

在这里,您有一个设计问题。您不能调用任何框架的方法,因为您ActionListener的范围仅限于Login面板。如何解决呢?实现ActionListener具有
足够 可视性 以放置框架的。

注意: 尽量避免使用NetBeans
GUI构建器(或任何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();
            }
        });
    }
}


 类似资料:
  • 问题内容: 这是功课。入门Java类。仍然把我的头缠在这东西上。 该项目是要建立一个库存管理系统。 除了如何使此按钮更改JTextField中的文本外,我已经弄清楚了一切。它需要从产品阵列(在本例中为DVD)中添加信息。这本书讨论了管理诸如JTextField的字体,位置和状态之类的不同方法,但是没有涉及格式化或调用文本的方法。 这是我要使用JTextArea进行操作的示例。从本质上讲,这就是我想

  • 我正在尝试做一些非常简单的事情,在点击按钮时更改文本。 我似乎无法使用它,有人能告诉我添加ActionListener的正确位置吗? 主要类别 atmGUI类 编辑: 这是产生的错误 类型new ActionListener(){}必须实现继承的抽象方法ActionListener.actionPerform(ActionEvent)

  • 我不知道怎么做,但我希望我的JButton在按下时开始运行一个方法,然后在我再次单击它时暂停该方法。此外,该方法应该连续运行。现在,我的按钮不会暂停和启动,也不会连续运行。 我知道我的问题的答案就在那里,但我的尝试刚刚在一个牢不可破的while循环中结束。 我问了其他人,他们告诉我必须在一个单独的线程中运行一些东西。问题是,我对线程一无所知。没有线程还有其他方法吗?

  • 我在应用程序中尝试将Spring缓存与ehcache结合使用时遇到了一个问题。由于无法详细说明的原因,我的应用程序使用BeanFactory图而不是ApplicationContext。正如Spring文档中所述,只要我们手动注册BeanPostProcessor,这种方法就可以很好地工作。 我们现在正在为应用程序添加缓存。当我们使用最简单的注释配置时,它可以工作。 //这很有效 我们将其配置为为

  • 我目前陷入以下情况: 我正在尝试将对象A保存到数据库中。但是A是由很多其他物体组成的,B,C,B,C由D,E组成...有很多嵌套的对象,你知道我的意思。让我们把保存A的整个过程称为事务1。 在事务1的中间,当涉及到保存一些对象X(它通过许多链接与A相关联)时,假设是方法SaveX()触发了保存X。在SaveX()方法中,业务逻辑要求对另一个对象Y进行另一个查询,假设方法是queryY()。 因此,

  • 对于每个客户机,我们自然需要发送关于事务的反馈(OK或Exception->rollback)。 我的问题是:如果我使用,是否意味着只使用一个事务,如果第100个客户机遇到问题,第1个客户机的事务也会回滚?