2013-12-23 5 views
0

Я изучаю, как использовать GridBagLayout. Я создал две кнопки в JFrame. Я попытался сделать так, чтобы один из них занимал один столбец (по умолчанию) и два других столбца, что в два раза больше первого (я знаю, что могу добиться этого с помощью setPrefferredSize, но я намерен научиться использовать ширина сетки и сетка).Об использовании GridBagLayout в Java

В чем проблема? Спасибо

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

public class Main extends JFrame { 

    Main(){ 

     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setSize(500,500); 

     JPanel panel1 = new JPanel(new GridBagLayout()); 
     JButton b1,b2; 
     b1 = new JButton("button 1"); 
     b2 = new JButton("button 2"); 

     GridBagConstraints gbc = new GridBagConstraints(); 

     gbc.gridx = 1; 
     gbc.gridwidth = 1; 
     panel1.add(b1); 
     gbc.gridx = 2; 
     gbc.gridwidth = 2; 
     panel1.add(b2); 

     add(panel1); 

     setVisible(true); 

    } 

    public static void main(String[]args){ 

     Main m = new Main(); 

    } 

} 

ответ

0

Попробуйте использовать GridBagConstraint таким образом, надеемся, что это вам поможет.

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

public class Main extends JFrame { 

    Main(){ 

     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setSize(500,500); 

     JPanel panel1 = new JPanel(new GridBagLayout()); 
     JButton b1,b2; 
     b1 = new JButton("button 1"); 
     b2 = new JButton("button 2"); 

     panel1.add(b1, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0)); 
     panel1.add(b2, new GridBagConstraints(1, 0, 1, 1, 2.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0)); 

     add(panel1); 

     setVisible(true); 

    } 

    public static void main(String[]args){ 

     Main m = new Main(); 

    } 

} 

EDIT

Или изменения в коде, как это ниже:

gbc.gridx = 1; 
gbc.gridwidth = 1; 
panel1.add(b1, gbc); 
gbc.gridx = 2; 
gbc.gridwidth = 2; 
gbc.fill = gbc.HORIZONTAL; //set fill property to HORIZONTAL 
gbc.weightx= 2.0; 
panel1.add(b2, gbc); //While adding button also add it with gbc 
1

Проблема в том, что все столбцы в GridBagLayout не имеют одинаковую ширину. Ширины вычисляются на основе предпочтительного размера компонентов, которые они содержат. Таким образом, вы можете использовать 3, 4 или 100 в качестве ширины сетки для второй кнопки, это ничего не изменит.

Для изменения размера кнопок вам необходимо использовать fillx и weightx.

2

Неважно, сколько столбцов ширина второй кнопки.

На самом деле обе кнопки будут запрашивать их предпочтительную ширину, и ширина будет установлена ​​на них, если для них достаточно места.

Если это меньше места, тогда используется минимальная ширина.

Если есть дополнительное пространство, оно распределяется между элементами управления в соответствии с весами.

Вы можете попробовать установить iPadX = 100 для первого и iPadx = 200 и установить пропорцию iPadX = 1 для первого и iPadx = 2 для второго.

Смежные вопросы