JPanel

一、关于JPanel的size问题

当JPanel没有固定的size,而父组件的size变化了,父组件的变化通过什么形式可以传导到JPanel呢?我做了一些试验,结果如下:

1.当父控件不可见时,JPanel的size等于0,父控件可见后,JPanel的size也随之变化。

		JFrame frame = new JFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(1000, 500);
		JPanel  panel = new JPanel();
		frame.add(panel);
		//	frame.add(panel)之后。panel: width = 0, height = 0
		System.out.printf("frame.add(panel)之后。panel: width = %d, height = %d\n", panel.getWidth(), panel.getHeight());
		frame.validate();
		// frame.validate()之后。panel: width = 0, height = 0
		System.out.printf("frame.validate()之后。panel: width = %d, height = %d\n", panel.getWidth(), panel.getHeight());
		frame.setVisible(true);
		// frame.setVisible(true)之后。panel: width = 984, height = 459
		System.out.printf("frame.setVisible(true)之后。panel: width = %d, height = %d\n", panel.getWidth(), panel.getHeight());

2.当父控件的size变化后,父控件使用revalidate()方法后,JPanel的size也随之变化。

		final JFrame frame = new JFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(1000, 500);
		frame.setVisible(true);
		
		final JButton big = new JButton("big");
		final JButton small = new JButton("small");
		
		final JPanel caoZuoPanel = new JPanel();
		caoZuoPanel.setBackground(Color.ORANGE);
		caoZuoPanel.add(big);
		caoZuoPanel.add(small);
		
		final JPanel tuPanel = new JPanel();
		tuPanel.setBackground(Color.PINK);
		
		final JPanel  panel = new JPanel();
		panel.setLayout(new BorderLayout());
		panel.setBackground(Color.BLACK);
		panel.add(caoZuoPanel, BorderLayout.NORTH);
		panel.add(tuPanel, BorderLayout.CENTER);
		
		frame.add(panel, BorderLayout.CENTER);
		frame.revalidate();
		frame.setVisible(true);
		
		int width = frame.getWidth();
		int height = frame.getHeight();
		System.out.printf(
				"\n\n---------frame.setSize( %d, %d )之后-----------\n", width, height);
		System.out.printf("frame.getContentPane().getWidth() = %d,",
				frame.getContentPane().getWidth());
		System.out.printf("\t frame.getContentPane().getHeight() = %d\n",
				frame.getContentPane().getHeight());
		
		System.out.printf("tuPanel.getWidth() = %d", tuPanel.getWidth());
		System.out.printf("\t tuPanel.getHeight() = %d\n", tuPanel.getHeight());
		
		System.out.printf("panel: width = %d, height = %d\n",
				panel.getWidth(), panel.getHeight());
		
		big.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				int width = frame.getWidth() + 100;
				int height = frame.getHeight() + 100;
				frame.setSize(width, height);
				frame.revalidate();
				
				System.out.printf(
						"\n\n---------frame.setSize( %d, %d )之后-----------\n", width, height);
				System.out.printf("frame.getContentPane().getWidth() = %d,",
						frame.getContentPane().getWidth());
				System.out.printf("\t frame.getContentPane().getHeight() = %d\n",
						frame.getContentPane().getHeight());
				
				System.out.printf("tuPanel.getWidth() = %d", tuPanel.getWidth());
				System.out.printf("\t tuPanel.getHeight() = %d\n", tuPanel.getHeight());
				
				System.out.printf("panel: width = %d, height = %d\n",
						panel.getWidth(), panel.getHeight());
			}
			
		});
		
		small.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				int width = frame.getWidth() - 100;
				int height = frame.getHeight() - 100;
				frame.setSize(width, height);
				frame.revalidate();
				
				System.out.printf(
						"\n\n---------frame.setSize( %d, %d )之后-----------\n", width, height);
				System.out.printf("frame.getContentPane().getWidth() = %d,",
						frame.getContentPane().getWidth());
				System.out.printf("\t frame.getContentPane().getHeight() = %d\n",
						frame.getContentPane().getHeight());
				
				System.out.printf("tuPanel.getWidth() = %d", tuPanel.getWidth());
				System.out.printf("\t tuPanel.getHeight() = %d\n", tuPanel.getHeight());
				
				System.out.printf("panel: width = %d, height = %d\n",
						panel.getWidth(), panel.getHeight());
				
			}
			
		});





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值