繁体   English   中英

使用 actionlistener 从另一个 class 继承 JFrame

[英]inheriting a JFrame from another class using actionlistener

一旦在第一个 JFrame 上按下按钮,我正在尝试使用继承从另一个 class 中提取 JFrame。 我不确定如何正确执行此操作并不断收到不同的错误。 这是我拥有的当前代码。 有人可以使用我拥有的代码帮助我/引导我完成正确的方法吗? 还是我需要重写所有内容?

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.LayoutStyle.ComponentPlacement;
import java.awt.Font;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

import javax.swing.JFrame;
import javax.swing.JPasswordField;

public class acmeBankLogin {


    private JFrame frmAcmeBankLogin;
    private JPasswordField passwordInput;
    private JTextField usernameInput;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    acmeBankLogin window = new acmeBankLogin();
                    window.frmAcmeBankLogin.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the application.
     */
    public acmeBankLogin() {
        initialize();
    }

    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {
        frmAcmeBankLogin = new JFrame();
        frmAcmeBankLogin.setTitle("ACME Bank Login");
        frmAcmeBankLogin.setBounds(100, 100, 435, 230);
        frmAcmeBankLogin.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JLabel lblNewLabel = new JLabel("Username: ");

        JLabel lblNewLabel_1 = new JLabel("Password:");

        passwordInput = new JPasswordField(4);
        usernameInput = new JTextField();
        usernameInput.setColumns(10);

        JButton btnNewButton = new JButton("Submit");
        btnNewButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {

                String password = passwordInput.getText();
                String username = usernameInput.getText();

                if (username.trim().toLowerCase().equals("uccs") && password.trim().equals("1234")) {

                    acmeBank acmeBank = new acmeBank();
                    frmAcmeBank = new JFrame();

                }

                else {
                    JOptionPane.showMessageDialog(null, "Incorrect username/password!");

                }

            }

        });

        GroupLayout groupLayout = new GroupLayout(frmAcmeBankLogin.getContentPane());
        groupLayout.setHorizontalGroup(groupLayout.createParallelGroup(Alignment.LEADING).addGroup(groupLayout
                .createSequentialGroup().addGap(43)
                .addGroup(groupLayout
                        .createParallelGroup(Alignment.LEADING).addComponent(lblNewLabel).addComponent(lblNewLabel_1))
                .addGap(34)
                .addGroup(groupLayout.createParallelGroup(Alignment.LEADING, false).addComponent(passwordInput)
                        .addComponent(usernameInput, GroupLayout.DEFAULT_SIZE, 131, Short.MAX_VALUE))
                .addContainerGap(156, Short.MAX_VALUE))
                .addGroup(Alignment.TRAILING,
                        groupLayout.createSequentialGroup().addContainerGap(287, Short.MAX_VALUE)
                                .addComponent(btnNewButton, GroupLayout.PREFERRED_SIZE, 81, GroupLayout.PREFERRED_SIZE)
                                .addGap(51)));
        groupLayout
                .setVerticalGroup(groupLayout.createParallelGroup(Alignment.LEADING)
                        .addGroup(groupLayout.createSequentialGroup().addGap(47)
                                .addGroup(groupLayout.createParallelGroup(Alignment.BASELINE).addComponent(lblNewLabel)
                                        .addComponent(usernameInput, GroupLayout.PREFERRED_SIZE,
                                                GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
                                .addGap(9).addComponent(btnNewButton).addGap(14)
                                .addGroup(
                                        groupLayout.createParallelGroup(Alignment.BASELINE).addComponent(lblNewLabel_1)
                                                .addComponent(passwordInput, GroupLayout.PREFERRED_SIZE,
                                                        GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
                                .addContainerGap(70, Short.MAX_VALUE)));
        frmAcmeBankLogin.getContentPane().setLayout(groupLayout);
    }

}

在输入正确的用户名和密码后,应在第 74 行进行继承。

  1. 停止使用表单编辑器,它们没有帮助。 花时间和精力学习如何使用布局管理器并发现框架的最佳实践。
  2. 主要问题不是关于 inheritance,而是关于声明变量。 frmAcmeBank在任何地方声明,这是您的错误。

首先将代码更新为更像...

JButton btnNewButton = new JButton("Submit");
btnNewButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {

        String password = passwordInput.getText();
        String username = usernameInput.getText();

        if (username.trim().toLowerCase().equals("uccs") && password.trim().equals("1234")) {

            acmeBank acmeBank = new acmeBank();
            JFrame frmAcmeBank = new JFrame();

        } else {
            JOptionPane.showMessageDialog(null, "Incorrect username/password!");

        }

    }
});

现在看一下initialize方法的顶部,看看你将如何 go 关于将acmeBank添加到JFrame ...假设acmeBank是一个组件。

总体而言,更好的解决方案是使用CardLayout

您可能还想查看Java 代码约定 它会让你更容易阅读其他人的代码,也让其他人更容易阅读你的代码

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM