返回列表 发帖

(求助)JPanel大小的问题

我在一个JFrame中添加了一个主JPanel,然后再这个主JPanel中添加了两个JPanel,但只有主JPanel填满了整个JFrame,另外两个JPanel只是两个小点。我想知道怎么也能让主JPanel上的两个JPanel也能充满主JPanel,即填满整个JFrame。我的代码如下:

  1. /**
  2. * @(#)PanelTest.java
  3. *
  4. *
  5. * @author awp
  6. * @version 1.00 2008/12/16
  7. */
  8. import java.awt.*;
  9. import javax.swing.*;
  10. public class PanelTest {
  11. public static void main(String[] args){
  12.   MainFrame frame=new MainFrame();
  13.   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  14.   frame.setLocationRelativeTo(null);
  15.   frame.setVisible(true);
  16. }
  17. }
  18. class MainFrame extends JFrame{
  19. private static final int WIDTH=300;
  20. private static final int HEIGHT=400;
  21. private JPanel panel;
  22. private JPanel gPanel;
  23. private JPanel mPanel;

  24. public MainFrame(){
  25.   setTitle("Test");
  26.   setSize(WIDTH,HEIGHT);
  27.   
  28.   Container contentPane=getContentPane();
  29.   
  30.   panel=new JPanel();
  31.   gPanel=new JPanel();
  32.   mPanel=new JPanel();
  33.   
  34.   panel.setBackground(Color.blue);
  35.   gPanel.setBackground(Color.yellow);
  36.   mPanel.setBackground(Color.red);
  37.   
  38.   panel.add(gPanel);
  39.   panel.add(mPanel);
  40.   
  41.   contentPane.add(panel);
  42. }
  43. }
复制代码

我运行的结果如下:

请高手指点,最好附代码说明
谢谢!

提问赏金:5金币
获奖名单 : jlu_lamp_lamp(4金币)    crim(1金币)    
附件: 您需要登录才可以下载或查看附件。没有帐号?加入联盟
Don't give me any chance!
身挑一狙,独行天下!

不知道你要的充满是指什么样子的充满

你加一句panel.setLayout(new GridLayout(2,1));或者panel.setLayout(new GridLayout(1,2));
使用布局管理器就可以了
但是这样就会把蓝色的覆盖掉了。

不知道你是不是要这个样子
如下图:
这个是panel.setLayout(new GridLayout(2,1));的效果


这个是panel.setLayout(new GridLayout(1,2));的效果


[ 本帖最后由 jlu_lamp_lamp 于 2008-12-16 16:05 编辑 ]
附件: 您需要登录才可以下载或查看附件。没有帐号?加入联盟

TOP

awp 想要什么样的效果?
楼上的应该已经给出答案了吧
左右分的话,用默认值或设置成1行两列

TOP

Don't give me any chance!
身挑一狙,独行天下!

TOP

这是我的代码:

  1. import java.awt.*;
  2. import javax.swing.*;
  3. public class GridBagLayoutTest{
  4. public static void main(String[] args){
  5.   MainFrame frame=new MainFrame();
  6.   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  7.   frame.setLocationRelativeTo(null);
  8.   frame.setVisible(true);
  9. }
  10. }
  11. class MainFrame extends JFrame{
  12. private static final int WIDTH=300;
  13. private static final int HEIGHT=400;
  14. private JPanel panel;
  15. private JPanel gPanel;
  16. private JPanel mPanel;

  17. public MainFrame(){
  18.   setTitle("Test");
  19.   setSize(WIDTH,HEIGHT);
  20.    
  21.   Container contentPane=getContentPane();
  22.   
  23.   panel=new JPanel();
  24.   gPanel=new JPanel();
  25.   mPanel=new JPanel();
  26.   panel.setBackground(Color.blue);
  27.   gPanel.setBackground(Color.yellow);
  28.   mPanel.setBackground(Color.red);
  29.   panel.setLayout(new GridBagLayout());
  30.   GridBagConstraints c = new GridBagConstraints();
  31.   
  32.   c.gridx = 0; // 0行0列
  33.   c.gridy = 0;
  34.   c.gridwidth = 3;
  35.   c.gridheight = 3;
  36.   c.fill = GridBagConstraints.BOTH;
  37.   c.weightx = 0;
  38.   c.weighty = 0;
  39.   panel.add(gPanel,c);
  40.   
  41.   c.gridx = 4;
  42.   c.gridy = 0;
  43.   c.gridwidth = 1;
  44.   c.gridheight = 1;
  45.   c.fill = GridBagConstraints.BOTH;
  46.   c.weightx = 0;
  47.   c.weighty = 0;
  48.   panel.add(mPanel,c);
  49.   
  50.   contentPane.add(panel);
  51. }
  52. }
复制代码

我想做成左边的面板比右边的面板宽3倍。
Don't give me any chance!
身挑一狙,独行天下!

TOP

修改了awp兄最初的代码,用的是 BorderLayout

  1. import java.awt.*;
  2. import javax.swing.*;

  3. public class PanelTest {
  4.     public static void main(String[] args) {
  5.         MainFrame frame = new MainFrame();
  6.         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  7.         //frame.setLocationRelativeTo(null);
  8.         frame.setVisible(true);
  9.     }   
  10. }

  11. class MainFrame extends JFrame {
  12.     private static final int WIDTH = 300;
  13.     private static final int HEIGHT = 400;
  14.     private JPanel panel;
  15.     private JPanel gPanel;
  16.     private JPanel mPanel;

  17.     public MainFrame() {
  18.         setTitle("Test");
  19.         setSize(WIDTH,HEIGHT);
  20.                   
  21.         panel = new JPanel();
  22.         panel.setLayout(new BorderLayout()); //
  23.         
  24.         gPanel = new JPanel();
  25.         mPanel = new JPanel();
  26.       
  27.         panel.setBackground(Color.blue);
  28.         gPanel.setBackground(Color.yellow);
  29.         mPanel.setBackground(Color.red);
  30.             
  31.         int panelWidth = getWidth();
  32.         int panelHeight = getHeight();      
  33.         gPanel.setPreferredSize(new Dimension(panelWidth/4*3, panelHeight));
  34.         mPanel.setPreferredSize(new Dimension(panelWidth/4, panelHeight));
  35.          
  36.         panel.add(gPanel, BorderLayout.WEST); //
  37.         panel.add(mPanel);
  38.          
  39.         getContentPane().add(panel);
  40.     }
  41. }
复制代码

TOP

回复 6# crim 的帖子

我还是想用GridBagLayout布局来实现,这种布局我感觉看懂了,排列按钮可以,就是排列Panel的时候不行。
Don't give me any chance!
身挑一狙,独行天下!

TOP

用GridBagLayout可以啊
是你的值没有设对

c.weightx = 0;
c.weighty = 0;
panel.add(gPanel,c);

c.weightx = 0;
c.weighty = 0;
panel.add(mPanel,c);

这两段代码的值要设成这样:
c.weightx = 4;
c.weighty = 1;
panel.add(gPanel,c);

c.weightx = 1;
c.weighty = 1;
panel.add(mPanel,c);

weightx和weighty才是表示相对比例的,就像上面设的那样,4比1就可以了。
因为纵向只有一行元素,所以weighty只要都设成1以上就行了,如果是0的话不会拉伸铺满,所以不要设0。

因为你说:我想做成左边的面板比右边的面板宽3倍。
那就是左边黄色部分是右边红色部分的4倍
所以我就设成了4:1
楼主可以去试一下。

截图效果就是这样:


[ 本帖最后由 jlu_lamp_lamp 于 2008-12-17 01:12 编辑 ]
附件: 您需要登录才可以下载或查看附件。没有帐号?加入联盟

TOP

我大哥啊,总算对了,我原来没看过这个布局,那天看了好久才看懂那么参数的意思,想自己试试可就是不成功,多谢了啊。
Don't give me any chance!
身挑一狙,独行天下!

TOP

TOP

返回列表