用java的swing做界面,想通过在同一个窗口进行面板的切换来达到跳转界面的目的,可行不?

我请问一下,用java的swing做界面,想通过在同一个窗口进行面板的切换来达到跳转界面的目的,可行不?
最新回答
臣妾做不到

2024-10-13 08:54:19

答: 可行, 但是不推荐.  的确可以通过隐藏1个JPanel,显示另外1个JPanel 来达到目的, 但是不推荐,因为隐藏的JPanel 还会占用内存等系统资源, 并且可能导致界面布局混乱等问题.

解决办法:

  • 方法一: 可以使用JTabbedPane 来实现,代码如下

JTabbedPane jtp = new JTabbedPane();
JPanel jp1 = new JPanel();
JPanel jp2 = new JPanel();
jtp.add("面板1", jp1);
jtp.add("面板2", jp2);
  • 方法二:  (推荐) 跳转界面 , 还是需要从1个窗口到另外1个窗口, 这样正规点, 数据可以从第一个窗口,传递到第二个窗口就可以了

代码

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

public class JTFDemo extends JFrame  implements ActionListener{
JTextField jtf1;

public JTFDemo() {
JLabel jl = new JLabel("用户名:");
jtf1 = new JTextField(12);
JButton jb = new JButton("提交");
jb.addActionListener(this);
JPanel jp1 = new JPanel();
jp1.add(jl);
jp1.add(jtf1);
jp1.add(jb);
add(jp1);
setTitle("测试Demo");// 标题
setSize(280, 180);// 窗口大小
setLocationRelativeTo(null);// 窗口居中
setDefaultCloseOperation(EXIT_ON_CLOSE);// 窗口点击关闭时,退出程序
setVisible(true);// 窗口可见
}

public static void main(String[] args) {
new JTFDemo();
}

@Override
public void actionPerformed(ActionEvent e) {
String name = jtf1.getText().trim();
if (name.equals("")) {//判断是否是空字符串
JOptionPane.showMessageDialog(null, "用户名不能为空,请重新输入.", "错误", JOptionPane.ERROR_MESSAGE);
} else if (name.length() < 5) {//判断字符串的长度
JOptionPane.showMessageDialog(null, "用户名长度至少5位.", "错误", JOptionPane.ERROR_MESSAGE);
} else {
this.setVisible(false);//旧窗口隐藏
this.dispose();//旧窗口销毁
new MainFrame(name);//打开新窗口, 并把name传递进去
}

}

}
class MainFrame extends JFrame{
String name;
public MainFrame(String name) {
this.name = name;
JLabel jl = new JLabel("欢迎用户: "+name+" 回来!~");
add(jl);
setTitle("主窗口");// 标题
setSize(280, 180);// 窗口大小
setLocationRelativeTo(null);// 窗口居中
setDefaultCloseOperation(EXIT_ON_CLOSE);// 窗口点击关闭时,退出程序
setVisible(true);// 窗口可见
}
}

效果图