Как установить размер и границы кнопки, которые добавляются на JPanel? - PullRequest
1 голос
/ 18 февраля 2010

Я написал код в Java, используя Swing. Так что мне нужно добавить JscrollPane в JPanel n, тогда я добавлю кнопки фиксированного размера в 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
 } 

Я хочу добавить кнопку одну под другой ... (т.е. я получаю вертикальную полосу прокрутки)

т.е. button1

 button2 

   ' 

   ' 

проблема заключается в размере и границах кнопки, которые я устанавливаю, используя setsize / preference size и setbounds , не влияющие на размер и положение кнопки (которые добавляются на панель) вообще ...

как это сделать?кто-нибудь может мне помочь ???

Ответы [ 3 ]

2 голосов
/ 18 февраля 2010

Если вы хотите установить положение и размер компонентов ( от руки ), контейнер не должен использовать LayoutManager, то есть установите его как null, чтобы удалить менеджер по умолчанию:

    panel.setLayout(null);
    ...
        button[i].setBounds(20, y, 120, 120);
        // setSize is not needed
        ...
        panel.add(button[i]);
1 голос
/ 18 февраля 2010

Попробуйте setMaximumSize ()

0 голосов
/ 18 февраля 2010

Размер будет определяться LayoutManager и только определенные LayoutManager уважают предпочтительный размер Component. Например, использование BorderLayout и добавление JButton к центру (т. Е. BorderLayout.CENTER) приведет к расширению кнопки, чтобы занять все доступное пространство.

Из API BoxLayout: « BoxLayout пытается расположить компоненты с их предпочтительной шириной (для горизонтального расположения) или высотой (для вертикального размещения). ». Так что в вашем случае все кнопки будут такими же широкими, как и самая широкая кнопка. Чтобы избежать этого случая, вы можете использовать GridBagLayout; есть учебник здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...