在 CardLayout 中使用面板内部的按钮切换 JPanels

Switching JPanels in a CardLayout using buttons inside the panel itself

提问人:FlamingGhost 提问时间:11/12/2023 更新时间:11/12/2023 访问量:45

问:

我正在尝试使用 GUI 创建一个简单的 Java 程序,使用 Swing 作为主要工具。我尝试使用 CardLayout 来处理在同一框架内切换“屏幕”(面板),虽然网上有这方面的教程,但大多数(如果不是全部)都认为按钮位于我想要切换的面板之外,而我正在尝试做相反的事情,用于切换面板的按钮位于面板本身内部。所以我一直在努力做到这一点,但即使在互联网上寻找了几个小时之后,我也不知道如何做到这一点。

我尝试在 Main 中创建一个单独的方法来处理面板切换并在 Login 中引用它,但这不起作用,因为我无法让它传递正确的参数,除此之外,它一直抛出返回 null 的错误或完全不起作用。

以下是重要文件的代码:

主要

package gui;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Container;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Main extends JFrame {
    private static final long serialVersionUID = 1L;
    /**
     * Create the frame.
     */
    public Main() {
        JFrame frame = new JFrame("Swing Frame");
        Login loginpanel = new Login();
        HomeMenu homemenu = new HomeMenu();
        
        JPanel cards = new JPanel(new CardLayout());
        cards.add(loginpanel, "Panel 1");
        cards.add(homemenu, "Panel 2");
        
        Container pane = frame.getContentPane();
        pane.add(cards, BorderLayout.CENTER);
        // Set the size of the frame
        frame.setSize(900, 600);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
    
    
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                    Main frame = new Main();
                    frame.setVisible(false);
            }
        });
    }
}

登录

package gui;

import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.border.EmptyBorder;

public class Login extends JPanel {

    private static final long serialVersionUID = 1L;
    private JTextField textField;
    private JPasswordField passwordField;

    public Login getPanel() {
        return this;
    }   

    public Login() {
        setBounds(100, 100, 900, 600);
        setBorder(new EmptyBorder(5, 5, 5, 5));
        setLayout(null);
        
        JLabel lblNewLabel = new JLabel("BOOKSTORE MANAGEMENT SYS 1.0");
        lblNewLabel.setBounds(12, 10, 878, 81);
        lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER);
        add(lblNewLabel);
        lblNewLabel.setFont(new Font("Tahoma", Font.PLAIN, 38));
        
        JLabel lblNewLabel_1 = new JLabel("Enter Username:");
        lblNewLabel_1.setBounds(217, 164, 180, 27);
        lblNewLabel_1.setFont(new Font("Tahoma", Font.PLAIN, 23));
        add(lblNewLabel_1);
        
        textField = new JTextField();
        textField.setBounds(433, 163, 255, 28);
        add(textField);
        textField.setColumns(10);
        
        JLabel lblNewLabel_1_1 = new JLabel("Enter Password:");
        lblNewLabel_1_1.setFont(new Font("Tahoma", Font.PLAIN, 23));
        lblNewLabel_1_1.setBounds(217, 248, 180, 27);
        add(lblNewLabel_1_1);
        
        passwordField = new JPasswordField();
        passwordField.setBounds(433, 253, 255, 28);
        add(passwordField);
        
        JButton btnNewButton = new JButton("Log in");
        btnNewButton.setForeground(new Color(0, 0, 0));
        btnNewButton.setFont(new Font("Tahoma", Font.PLAIN, 23));
        btnNewButton.setBounds(347, 369, 176, 46);
        add(btnNewButton);
        btnNewButton.addActionListener((ActionListener) new ActionListener(){  
            @Override
            public void actionPerformed(ActionEvent e) {
                }  
            });
        }
}

Java Swing 用户界面 JPancher CardLayout

评论


答: 暂无答案