关于java的GUI简单切换界面

1.关于java的GUI简单切换界面

在刚开始学习java的gui界面设计的时候因为课本上没有相关切换界面的介绍,所以如何进行简单的一个界面切换困扰了我很久。因此我上网看了一些代码,却发现网上的大多数代码都很繁琐,仔细看下去感觉有许多冗余,虽然那些代码达到了切换界面的目的,但也有其它一些我暂时用不上的功能。
简而言之,就是网上这部分的代码不够精简。于是我开始单单把这一简单的功能剥离出来。废话不多说还是先上代码吧,想说的话都在注释里。 视图部分代码:

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

public class View extends JFrame {
	public void view()
	{
		ViewAction exwpAction=new ViewAction(this);//提前定义好动作对象
		setLayout(new BorderLayout());//使用BorderLayout布局
		setSize(400,400);//设置界面大小
		this.setTitle("视图1界面");//设置界面名称
		JButton eb=new JButton("视图2");//设置切换的按钮eb
		JLabel tip_l=new JLabel("视图1",0);//界面的内容,这里用一个标签来替代具体内容,后面的“0”是为了使这个标签居中对齐
		eb.addActionListener(exwpAction);//为eb这个按钮添加按键监听
		add(tip_l, BorderLayout.CENTER);//将tip_l这个标签添加到布局的中间
		add(eb, BorderLayout.SOUTH);//将按钮eb添加到布局的下方
		setVisible(true);//使视图可视化
	}
	public void view2()
	{
		ViewAction exwpAction=new ViewAction(this);
		setLayout(new BorderLayout());
		setSize(400,400);
		this.setTitle("视图2界面");
		JButton eb=new JButton("视图1");
		JLabel tip_l=new JLabel("视图2",0);
		eb.addActionListener(exwpAction);
		add(tip_l, BorderLayout.CENTER);
		add(eb, BorderLayout.SOUTH);
		setVisible(true);
	}

}

动作部分代码:

import java.awt.event.ActionEvent;

public class ViewAction implements java.awt.event.ActionListener {
	/*
	 * 这一部分是因为我把界面和动作分开成两个类来写了才需要进行对象的传递如果动作和界面在一个对象中写的话就不需要传入对象了
	 */
	View v=new View();//先定义一个View对象在切换界面的时候会使用到
	public ViewAction(View v)//将外界的View对象传入这个类里 
	{
		this.v=v;
	}
	public void actionPerformed(ActionEvent event)
	{
	Object object=event.getSource();//创建事件源对象
	switch(event.getActionCommand()){
	//如果按下视图1
	case "视图1":
		//这里之所以先创建新视图再关闭旧视图是因为反过来的话我们会发现延迟看上去会有一些难受
		new View().view();//new一个View类并调用里面的view函数
		v.setVisible(false);//关闭穿进来的那个类的视图
		break;
	//如果按下视图2
	case "视图2":
		new View().view2();
		v.setVisible(false);
		}
	}

}

主类部分代码:

public class Main {
	public static void main(String[] args) {
		View v=new View();
		v.view();
	}

}

运行效果:
运行主类后:
在这里插入图片描述
点击视图2后
在这里插入图片描述
点击视图1后
在这里插入图片描述

  • 48
    点赞
  • 159
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现登录界面的画布切换,你可以使用`CardLayout`类。`CardLayout`类是一个布局管理器,它可以让你在同一个容器中切换不同的组件。具体实现步骤如下: 1. 首先,创建一个`JFrame`容器,并设置它的布局管理器为`CardLayout`: ```java JFrame frame = new JFrame("登录界面"); CardLayout cardLayout = new CardLayout(); frame.setLayout(cardLayout); ``` 2. 创建两个画布(`JPanel`),分别用于显示登录界面和注册界面: ```java JPanel loginPanel = new JPanel(); // 添加登录界面的组件到loginPanel中 JPanel registerPanel = new JPanel(); // 添加注册界面的组件到registerPanel中 ``` 3. 将两个画布添加到容器中: ```java frame.add(loginPanel, "login"); frame.add(registerPanel, "register"); ``` 注意,这里的第二个参数是一个字符串,用于标识这个画布。后面我们会用这个字符串来切换画布。 4. 在登录界面中添加一个按钮,点击按钮后切换到注册界面: ```java JButton registerButton = new JButton("注册"); registerButton.addActionListener(e -> { cardLayout.show(frame.getContentPane(), "register"); }); loginPanel.add(registerButton); ``` 这里使用`show`方法来切换画布。第一个参数是容器,第二个参数是画布的标识字符串。 5. 在注册界面中添加一个按钮,点击按钮后切换回登录界面: ```java JButton backButton = new JButton("返回"); backButton.addActionListener(e -> { cardLayout.show(frame.getContentPane(), "login"); }); registerPanel.add(backButton); ``` 同样地,使用`show`方法切换回登录界面。 完整代码示例: ```java import javax.swing.*; import java.awt.*; public class LoginFrame { public static void main(String[] args) { JFrame frame = new JFrame("登录界面"); CardLayout cardLayout = new CardLayout(); frame.setLayout(cardLayout); JPanel loginPanel = new JPanel(); JButton registerButton = new JButton("注册"); registerButton.addActionListener(e -> { cardLayout.show(frame.getContentPane(), "register"); }); loginPanel.add(registerButton); JPanel registerPanel = new JPanel(); JButton backButton = new JButton("返回"); backButton.addActionListener(e -> { cardLayout.show(frame.getContentPane(), "login"); }); registerPanel.add(backButton); frame.add(loginPanel, "login"); frame.add(registerPanel, "register"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(400, 300); frame.setVisible(true); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值