代码之家  ›  专栏  ›  技术社区  ›  PPB

如何设置JPanel上添加的按钮的大小和绑定?

  •  1
  • PPB  · 技术社区  · 15 年前

    我用swing用java编写了一个代码,这样我就可以在jpanel n中添加jscrollpane,然后以垂直方式在jpanel中添加固定大小的按钮。

    JPanel panel=new JPanel(); 
    panel.setBackground(Color.WHITE); 
    panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); 
    int v=ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS; 
    int h=ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS;  
    JScrollPane jsp=new JScrollPane(panel,v,h); 
    jsp.setPreferredSize(new Dimension(600,600)); 
    jsp.setBounds(150,670,850,200); 
    frame.add(jsp); 
    

    然后在运行时添加按钮。

     for(i=0;i<n;i++)  
    { 
         button[i]=new JButton(); 
         button[i].setBounds(20,y,120,120); 
         button[i].setSize(120,120); 
         button[i].setToolTipText(file[i].toString());        
         button[i].setIcon(Icon); 
         panel.add(button[i]);    
         y=y+140; //initially y=20 so 1st button on x=20,y=20 2nd button on x=20,160
     } 
    

    我想在另一个下面添加一个按钮…(即我得到一个垂直滚动条)

    即钮扣1

     button2 
    
       ' 
    
       ' 
    

    问题是我使用setsize/prefered size和setbounds设置的按钮的大小和范围是 不影响大小和位置 按钮(添加在面板上)的…

    怎么做? 有人能帮我吗????

    3 回复  |  直到 15 年前
        1
  •  1
  •   Roman    15 年前

    尝试设置最大大小()

        2
  •  2
  •   user85421    15 年前

    如果要设置组件的位置和大小( 用手 ),容器不应使用LayoutManager,即将其设置为 null 要删除默认管理器:

        panel.setLayout(null);
        ...
            button[i].setBounds(20, y, 120, 120);
            // setSize is not needed
            ...
            panel.add(button[i]);
    
        3
  •  0
  •   Adamski    15 年前

    大小将由 LayoutManager 只有确定 布局管理器 尊重某人 Component 的首选大小。例如,使用 BorderLayout 并添加 JButton 到中心(即 BorderLayout.CENTER )将导致按钮展开以占用所有可用空间。

    从BoxLayout API:“ BoxLayout尝试按组件的首选宽度(对于水平布局)或高度(对于垂直布局)排列组件。 “。因此,在您的情况下,所有的按钮将作出最宽的按钮。为了避免这种情况,你可以使用 GridBagLayout ;有一个教程 here