不幸的是,我们的团队负责人决定我们将 Swing 用于这个轻量级桌面应用程序。我以前没有使用 Swing 的经验。我将在项目的 GUI 方面工作。我已经创建了一个包含元素的框架,并在事件侦听器中编写了逻辑。现在我想在用户登录后将用户重定向到一个新框架。
我怎么做?谢谢
PS如果你能给我指出一个适合初学者的好教程,我将不胜感激
不幸的是,我们的团队负责人决定我们将 Swing 用于这个轻量级桌面应用程序。我以前没有使用 Swing 的经验。我将在项目的 GUI 方面工作。我已经创建了一个包含元素的框架,并在事件侦听器中编写了逻辑。现在我想在用户登录后将用户重定向到一个新框架。
我怎么做?谢谢
PS如果你能给我指出一个适合初学者的好教程,我将不胜感激
您的框架应该保持不变,只需创建并显示新的 JPanel 而不是旧的。
参见下面的JPanel绘画过程:
正如@Gilbert Le Blanc 指出的那样(对他+1)。在 Swing 中,使用多个JFrame
s是不好的做法。
要完成您想要的:
CardLayout
允许动态切换组件的使用
或者使用JFrame#removeAll()
并添加一个新的JPanel
(+1 Fess)
尝试使用JDialog
/JOptionPane
然后重定向到 mainJFrame
这里是一个很好的主题链接:How to Make Dialogs
听起来您的术语混淆了。当我们听到“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);
}
});
}
}
在 Swing 中,您有一个JFrame
. 您使用JDialog
s 从用户那里获取用户 ID 和密码输入。
这是Oracle Swing 教程的链接。
您可以以与已有的方式大致相同的方式创建一个新框架;
MyFrame f = new MyFrame(); //MyFrame extends javax.swing.JFrame
然后把它带到前面;
f.setVisible(true);
f.toFront();