JPanel

来源:互联网 发布:威海近年来人口数据 编辑:程序博客网 时间:2024/04/19 06:07

一、关于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 = 0System.out.printf("frame.add(panel)之后。panel: width = %d, height = %d\n", panel.getWidth(), panel.getHeight());frame.validate();// frame.validate()之后。panel: width = 0, height = 0System.out.printf("frame.validate()之后。panel: width = %d, height = %d\n", panel.getWidth(), panel.getHeight());frame.setVisible(true);// frame.setVisible(true)之后。panel: width = 984, height = 459System.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() {@Overridepublic 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() {@Overridepublic 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
原创粉丝点击