关于GUI的两道练习题及其注意事项

1、设计模态框 及其 控制大小变化(当按钮解锁大小即可改变大小 点击之后变为锁定大小)
采用的是按钮事件监听嵌套——一个事件嵌套一个
代码示例:

 JFrame jf=new JFrame("example");
		 JButton jb1=new JButton("打开一个模态窗口");

		 jf.setLayout(null);
		jb1.setLayout(null);
		 jf.setBounds(200,200,300,300);
		jb1.setBounds(20,20,200,20);

		jf.add(jb1);
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		jf.setVisible(true);

		jb1.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				JDialog jd=new JDialog(jf,"this is a example!");
				jd.setResizable(true);
				jd.setLayout(null);
				jd.setBounds(200,200,200,300);

				JButton jb2=new JButton("locked!");
				jb2.setLayout(null);
				jb2.setBounds(20,20,100,100);
				jd.add(jb2);

				jd.setModal(true);

				jb2.addActionListener(new ActionListener() {
					@Override
					public void actionPerformed(ActionEvent e) {

						if(jb2.getText()=="locked!")
						{
							jd.setResizable(false);
							jb2.setText("Unloced!");
						}
						else
						{
							jd.setResizable(true);
							jb2.setText("locked!");
						}
					}
				});
				jd.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
				jd.setVisible(true);
			}
		});

需要解释的是 什么是模态窗口——其背后父窗口不能被关闭前提是该窗口为模态窗口——setmodal

一开始这段代码是运行不了的 还以为事件监听里不能嵌套 之后才发现对于JDialog的setDefaultCloseOperation()里放的是JDialog.DISPOSE_ON_CLOSE而不是JDialog.EXIT_ON_CLOSE
如果是EXIT_ON_CLOSE是直接打不开且是有异常的

2、布局器的使用 —— 计算器模板

JFrame jf=new JFrame("计算器模板");
JButton jb1=null;
Scanner s=new Scanner(System.in);

jf.setLayout(new GridLayout(4,5,8,8));
		for (int i=1;i<=20;i++)
		{
			String str=s.nextLine();
			jb1=new JButton(str);
			jb1.setPreferredSize(new Dimension(51, 51));//这个是多余的部分 实在寻找如何网格分布有间隙中途的尝试
            jf.add(jb1);
		}
jf.setBounds(200,200,400,300);

jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);

需要注意的就是 GridLayout 网格分布器里能放的参数不仅仅是几行几列的设定还有水平间隙和垂直间隙的设定

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值