JAVA 图形界面大作业(一) 布局篇

  • 本人是一个大二的学生,在写完大作业之后,对大作业会使用的一些东西进行总结,在介绍布局之前,你首先要做一个窗口JFrame

JFrame 窗口的基本方法

  • setBounds(int x,int y,int width,int heighth)
    //设置窗口左上角的坐标,以及长和宽,一般提到的位置都是指窗口左上角的点在屏幕中的位置
  • setVisiable(true)//这个一定要设置,不然看不见窗口
  • setResizable(false)
    //设置窗口是否可以调节大小,例如null布局中里面的组件大小都是固定的,一旦设置了true,窗口放大的时候,null布局里面的组件并不会放大,会导致有空白部分
  • setDefaultCloseOperation(int operation)
    //设置关闭规则,可选参数如下:
    DO_NOTHING_ON_CLOSE(按下关闭按钮没有反应,即关不掉),
    HIDE_ON_CLOSE (关闭之后,后台还在运行,只是隐藏了而已),
    DISPOSE_ON_CLOSE (隐藏当前窗口,并释放窗体占有的其他资源),
    EXIT_ON_CLOSE (真正的结束)

容器

接下来你应该用一个容器,因为JFrame没办法直接将组件添加上去,我们要将后面的组件添加到容器中

  • Container c=frame.getContentPane();

//就是初始化一个容器,调用该方法后会得到窗口的内容面板

接下来开始操作介绍布局啦!!!
首先介绍一下如何设置布局,c.setLayout()//参数填你想要的布局方式
接下来介绍一些常用的布局

BorderLayout

c.setLayout(new BorderLayout());
这是最经常会使用到的布局,他会将窗口分为东西南北中五块,然后你对这五个地方进行组件放置
放置方法:c.add(组件,BorderLayout.CENTER) //这就是加入在窗口中间
其他地方没有组件放置时,并不会出现

    JFrame frame=new JFrame("测试");
	Container c=frame.getContentPane();
	c.setLayout(new BorderLayout());
	JButton btn=new JButton("中");
	c.add(btn,BorderLayout.CENTER);
	JButton btn1=new JButton("东");
	c.add(btn1,BorderLayout.EAST);
	JButton btn2=new JButton("南");
	c.add(btn2,BorderLayout.SOUTH);
	JButton btn3=new JButton("西");
	c.add(btn3,BorderLayout.WEST);
	JButton btn4=new JButton("北");
	c.add(btn4,BorderLayout.NORTH);
	frame.setVisible(true);

在这里插入图片描述
但是有一个问题,就是你想要每一块的大小不一样,现在怎么办呢?
这个时候你可以设置新的面板加进去容器当中,每个面板大小不一样就可以了!

	JPanel panel=new JPanel();
	JLabel label=new JLabel("北");
	panel.setBackground(Color.BLUE);//设置面板颜色
	panel.add(label);
	panel.setSize(new Dimension(50,50));//改变面板大小
	c.add(panel,BorderLayout.NORTH);
	JPanel panel1=new JPanel();
	JLabel label1=new JLabel("中");
	panel1.add(label1);
	panel1.setSize(new Dimension(100,50));//面板大小
	c.add(panel1,BorderLayout.NORTH);

在这里插入图片描述
这样就可以设置自己想要的格局了
但是有时候BorderLyout的组件都会帮你居中显示,有时候你会想让北面的组件靠左显示,这时候怎么办呢??
这里提供一个思路

  • 你可以在北部面板中再设置一次BorderLayout,想要靠左就把组件添加在西,这样就可以拉!

CardLayout

  • CardLayout cardLayout=new CardLayout();
    JPanel panel=new JPanel();
    panel.setLayout(cardLayout);

这是一个卡片布局,就是类似于书本那样一页一页的翻页显示
我们需要用到的方法就是

  • panel.add(JPanel panel,String name)//添加面板,参数分别是新面板以及面板的名字

  • cardLayout.next(panel)

    //注意是cardLayout,不是panel,参数是容器名称,即放置这个布局的容器,这个会显示当前组件的下一个组件,最后一个组件则切换到第一页

  • cardLayout.first(容器名称)

    显示容器中第一个组件 cardLayout.last(容器名称)
    显示容器中最后一个组件 cardLayout.previous(容器名称)

	CardLayout cardLayout=new CardLayout();
	JPanel panel=new JPanel();
 	panel.setLayout(cardLayout);
	for(int i=1;i<=10;i++) {
		JLabel label=new JLabel(Integer.toString(i));
		panel.add(label,Integer.toString(i));//添加标签,并取名为i
	}
	JButton btn=new JButton("下一页");
	btn.addActionListener(new ActionListener() {//添加监听
		
		@Override
		public void actionPerformed(ActionEvent e) {
			// TODO Auto-generated method stub
			cardLayout.next(panel);//点击按钮会切到下一个,可以看到我已经是第六页了
		}
	});
	c.add(panel,BorderLayout.CENTER);
	c.add(btn,BorderLayout.SOUTH);

在这里插入图片描述
其他方法我就不展示啦
但其实我们有时候会想跳转到指定页面,怎么办呢?
这个时候可以使用

  • cardLayout.show(容器名称,名字);

//则会跳转到指定页面,当页面不存在是不会跳转的

GirdLayout

JPanel panel=new JPanel();
panel.setLayout(new GridLayout(4,4)); //4×4
会将页面分割成一样大的格局,像巧克力那样一块一块的
panel.add(组件)

JPanel panel=new JPanel();
 	panel.setLayout(new GridLayout(4,4));
	for(int i=1;i<=16;i++) {
		JLabel label=new JLabel(Integer.toString(i));
		label.setBorder(BorderFactory.createLineBorder(Color.gray));//设置边框线
		panel.add(label);
	}	
	c.add(panel,BorderLayout.CENTER);

在这里插入图片描述

  • 当加入的组件大于你规定的方格数时,它会自己进行重新布局

当然没提到的还有很多布局,例如

  • null布局:组件大小需要自己设置位置和大小,这个用起来很不方便,因为他的大小时固定的,窗口放大之后组件不会灵活变动大小,而且用起来很麻烦,每一个组件都需要调大小和位置
  • 网格组布局:这个是网格布局的升级版,和网格布局不一样的是,组件可以设置跨越的行数/列数,但是用起来需要设置很多属性,所以个人觉得不太好用
  • 流布局:会自己线性布局,和流水一样,但是个人觉得还是BorderLayout好用

分享结束,期待下一篇!

  • 6
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值