2015-03-12 4 views
0

Нужно немного GridbagLayout руководство. См. Код ниже. Я хочу, чтобы кнопка 2 была в два раза шире, чем кнопки 1, 3 и 4. Однако все четыре на самом деле отображаются с одинаковой шириной. Очевидно, что-то не так, но я не могу понять, что.Ширина кнопки в GridBagLayout

Спасибо.

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

public class GridbagLayoutTetst { 
    private static void createAndShowGUI() { 
     JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(400, 250); 

     JPanel panel = new JPanel(); 
     GridBagLayout gridbag = new GridBagLayout(); 
     GridBagConstraints c = new GridBagConstraints(); 
     c.fill = GridBagConstraints.HORIZONTAL; 
     c.weightx = 1.0; 
     panel.setLayout(gridbag); 

     JButton button0 = new JButton("Button 0"); 
     c.gridwidth = GridBagConstraints.REMAINDER; 
     gridbag.setConstraints(button0, c); 
     panel.add(button0); 

     JButton button1 = new JButton("Button 1"); 
     c.gridwidth = 1; 
     gridbag.setConstraints(button1, c); 
     panel.add(button1); 

     JButton button2 = new JButton("Button 2"); 
     c.gridwidth = 2; 
     gridbag.setConstraints(button2, c); 
     panel.add(button2); 

     JButton button3 = new JButton("Button 3"); 
     c.gridwidth = 1; 
     gridbag.setConstraints(button3, c); 
     panel.add(button3); 

     JButton button4 = new JButton("Button 4"); 
     c.gridwidth = GridBagConstraints.REMAINDER; 
     gridbag.setConstraints(button4, c); 
     panel.add(button4); 

     frame.add(panel); 
     frame.setVisible(true); 
    } 
    public static void main(String[] args) { 
     try { 
      UIManager.setLookAndFeel(
       "com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel" 
      ); 
     } catch (Exception exc) { 
      // 
     } 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       createAndShowGUI(); 
      } 
     }); 
    } 

} 
+0

'c.gridwidth' определяет, сколько столбцов используется компонентом. Вы хотите изменить это? Думаю, вы хотите использовать 'c.weightx' ..? – MalaKa

ответ

0

OK, используя комбинацию fill, setPreferredSize и weightx я достиг результата я хотел. Смотри ниже. Теперь кнопка2 всегда вдвое больше, чем другие кнопки в этой строке, даже когда я изменяю размер рамки. Просто чувствует, как рубить меня. По достоинству оцените руководство по «предпочтительному» способу этого.

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

public class GridbagLayoutTetst { 
    private static void createAndShowGUI() { 
     JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(400, 250); 

     JPanel panel = new JPanel(); 
     GridBagLayout gridbag = new GridBagLayout(); 
     GridBagConstraints c = new GridBagConstraints(); 
     c.fill = GridBagConstraints.HORIZONTAL; 
     c.weightx = 1.0; 
     panel.setLayout(gridbag); 

     JButton button0 = new JButton("Button 0"); 
     c.gridwidth = GridBagConstraints.REMAINDER; 
     gridbag.setConstraints(button0, c); 
     panel.add(button0); 

     JButton button1 = new JButton("Button 1"); 
     button1.setPreferredSize(new Dimension (0,28)); 
     c.weightx = 0.2; 
     c.gridwidth = 1; 
     gridbag.setConstraints(button1, c); 
     panel.add(button1); 

     JButton button2 = new JButton("Button 2"); 
     button2.setPreferredSize(new Dimension (0,28)); 
     c.weightx = 0.4; 
     gridbag.setConstraints(button2, c); 
     panel.add(button2); 

     JButton button3 = new JButton("Button 3"); 
     button3.setPreferredSize(new Dimension (0,28)); 
     c.weightx = 0.2; 
     gridbag.setConstraints(button3, c); 
     panel.add(button3); 

     JButton button4 = new JButton("Button 4"); 
     button4.setPreferredSize(new Dimension (0,28)); 
     c.gridwidth = GridBagConstraints.REMAINDER; 
     gridbag.setConstraints(button4, c); 
     panel.add(button4); 

     frame.add(panel); 
     frame.setVisible(true); 

     System.out.println(button1.getPreferredSize()); 
    } 
    public static void main(String[] args) { 
     try { 
      UIManager.setLookAndFeel(
       "com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel" 
      ); 
     } catch (Exception exc) { 
      // 
     } 
     SwingUtilities.invokeLater(new Runnable() { 
       @Override 
       public void run() { 
       createAndShowGUI(); 
      } 
     }); 
    } 

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