不幸的是,我们的团队负责人已决定我们将Swing用于这款轻巧的桌面应用。我以前没有使用Swing的经验。我将在项目的GUI方面工作。我已经创建了一个包含元素的框架,并在事件监听器中编写了逻辑。现在我想在用户登录后将用户重定向到新的框架。
我该怎么做?感谢
P.S。如果你能指点我为初学者提供一个很好的教程,我将不胜感激
答案 0 :(得分:4)
你的框架应该保持不变,只需创建并显示新的JPanel而不是旧的。
见下面的JPanel绘画流程:
答案 1 :(得分:4)
正如@Gilbert Le Blanc指出的那样(+1给他)。在Swing中,它是bad practice to use multiple JFrame
s。
完成你想要的任务:
使用允许动态切换组件的CardLayout
或使用JFrame#removeAll()
并添加新的JPanel
(+1 Fess)
尝试使用JDialog
/ JOptionPane
,然后重定向到主JFrame
这是关于该主题的良好链接:How to Make Dialogs
答案 2 :(得分:4)
听起来你的术语已经混淆了。当我们听到“框架”时,我们认为JFrame
相当于“窗口”。所以大多数时候我们建议不要使用多个窗口,而是改变窗口的内容。内容通常用“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);
}
});
}
}
答案 3 :(得分:3)
在Swing中,您有一个JFrame
。您可以使用JDialog
来获取用户的用户ID和密码输入。
以下是Oracle Swing Tutorial的链接。
答案 4 :(得分:1)
你可以用与现有基本相同的方式创建一个新框架;
MyFrame f = new MyFrame(); //MyFrame extends javax.swing.JFrame
然后将它带到前面;
f.setVisible(true);
f.toFront();