-1

不幸的是,我们的团队负责人决定我们将 Swing 用于这个轻量级桌面应用程序。我以前没有使用 Swing 的经验。我将在项目的 GUI 方面工作。我已经创建了一个包含元素的框架,并在事件侦听器中编写了逻辑。现在我想在用户登录后将用户重定向到一个新框架。

我怎么做?谢谢

PS如果你能给我指出一个适合初学者的好教程,我将不胜感激

4

5 回答 5

4

您的框架应该保持不变,只需创建并显示新的 JPanel 而不是旧的。

参见下面的JPanel绘画过程:

在此处输入图像描述

于 2012-10-17T12:51:18.967 回答
4

正如@Gilbert Le Blanc 指出的那样(对他+1)。在 Swing 中,使用多个JFrames是不好的做法。

要完成您想要的:

  • CardLayout允许动态切换组件的使用

  • 或者使用JFrame#removeAll()并添加一个新的JPanel(+1 Fess)

  • 尝试使用JDialog/JOptionPane然后重定向到 mainJFrame 这里是一个很好的主题链接:How to Make Dialogs

于 2012-10-17T13:15:52.127 回答
4

听起来您的术语混淆了。当我们听到“Frame”时,我们认为JFrame它相当于“Window”。所以大多数时候我们建议不要使用多个窗口,而是更改窗口的内容。内容一般用“JPanel”制作。

所以一般来说,你设置你的JFrame,你用这个设置内容:

JPanel loginPanel = new JPanel();
frame.setContentPane(loginPanel);

如果您想用新面板替换您的登录面板,只需将新面板传递给该函数:

JPanel mainMenuPanel = new JPanel();
frame.setContentPane(mainMenuPanel);

(当然你想要那些面板中的一些内容)

这是一个简单的例子:

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

public class PanelRetriever{

    Box panel1;
    JPanel panel2;

    public PanelRetriever(final JFrame frame){
        //Build the first login panel
        panel1 = Box.createVerticalBox();
        panel1.setBackground(Color.orange);
        panel1.setOpaque(true);
        panel1.add(Box.createVerticalGlue());
        panel1.add(new JTextField(10));
        JButton login = new JButton("Login");
        login.addActionListener(new ActionListener(){

            @Override
            public void actionPerformed(ActionEvent arg0) {
                frame.setContentPane(getPanel2());
                frame.validate();
            }});
        panel1.add(login);
        panel1.add(Box.createVerticalGlue());

        //Build second panel
        panel2 = new JPanel();
        panel2.setBackground(Color.blue);
        panel2.setOpaque(true);
        JButton logout = new JButton("Logout");
        logout.addActionListener(new ActionListener(){

            @Override
            public void actionPerformed(ActionEvent e) {
                frame.setContentPane(getPanel1());
                frame.validate();
            }});
        panel2.add(logout, BorderLayout.CENTER);
    }

    public Container getPanel1(){
        return panel1;
    }

    public Container getPanel2(){
        return panel2;
    }

    public static void main(String args[])
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                JFrame frame = new JFrame();
                PanelRetriever pr = new PanelRetriever(frame);
                frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
                frame.setContentPane(pr.getPanel1());
                frame.setPreferredSize(new Dimension(500, 400));
                frame.pack();
                frame.setVisible(true);
            }
        });
    }
}
于 2012-10-17T13:20:35.867 回答
3

在 Swing 中,您有一个JFrame. 您使用JDialogs 从用户那里获取用户 ID 和密码输入。

这是Oracle Swing 教程的链接。

于 2012-10-17T12:49:47.720 回答
1

您可以以与已有的方式大致相同的方式创建一个新框架;

MyFrame f = new MyFrame(); //MyFrame extends javax.swing.JFrame

然后把它带到前面;

f.setVisible(true);
f.toFront();
于 2012-10-17T12:49:01.150 回答