2013-07-14 4 views
1
this.rootComponent.setLayout(new GridBagLayout()); 
     GridBagConstraints gbc=new GridBagConstraints(); 

     //gbc.gridwidth=2; 
     gbc.gridx=0; 
     gbc.gridy=0; 
     gbc.gridwidth=8; 
     gbc.anchor=GridBagConstraints.FIRST_LINE_START; 

     this.rootComponent.add(new JLabel("Test label 1"),gbc); 

     gbc.gridx=8; 
     gbc.gridy=12; 
     gbc.gridwidth=GridBagConstraints.REMAINDER; 
     gbc.anchor=GridBagConstraints.FIRST_LINE_START; 

     this.rootComponent.add(new JLabel("Test label"),gbc); 

Хотите отформатировать его следующим образом. серая часть показывает часть jpanel. Первоначально я хочу правильно разместить первые 2 jpanel. который не работает. как это исправить?GridBagLayout не работает

enter image description here

+0

это может быть работа именно для MigLayout, [но не вопрос для GBC, вы также можете установить процентное измерение для GBC] (http://stackoverflow.com/a/9015259/714968) – mKorbel

+0

@mkorbel обновил изображение, пожалуйста, см. – varuog

+0

Что на Земле по ssessed вы размещаете изображение с размерами 3,828px × 1,872px? См. [Как создать скриншоты?] (Http://meta.stackexchange.com/questions/99734/how-do-i-create-a-screenshot-to-illustrate-a-post) (советы по созданию * большие скриншоты). –

ответ

3

Вы не в состоянии указать любые weightx и weighty значения в GridBagConstraints. Кроме того, ваши значения gridwidth ошибочны, так как это должно быть только 2 для самого нижнего JPanel, для остальных это должно быть 1.


Объяснение того, что я делаю: Рассмотрим JPanel s BLUE и RED, они должны быть размещены вдоль X-AXIS в соотношении 70:30, по отношению друг к другу (поэтому их weightx будет 0.7 и 0.3 соответственно. Так как общая площадь вдоль X-AXIS составляет 1.0).

Теперь оба этих BLUE и RED JPanel с должны быть расположены вдоль Y-AXIS, по отношению к третьему GREEN JPanel в соотношении 90:10 Таким образом, оба этих BLUE и RED будут иметь weighty = 0.9 и GREEN JPanel будет иметь weighty = 0.1, но так как GREEN JPanel предполагают занимать всю площадь (по отношению к X-AXIS), а занятая BLUE и RED JPanel с, по этому вопросу, его gridwidth = 2 и weightx = 1.0.


Попробуйте этот пример кода:

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

public class GridBagLayoutExample 
{ 
    private GridBagConstraints gbc; 

    public GridBagLayoutExample() 
    { 
     gbc = new GridBagConstraints(); 
     gbc.anchor = GridBagConstraints.FIRST_LINE_START; 
    } 

    private void displayGUI() 
    { 
     JFrame frame = new JFrame("GridBagLayout Example"); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 

     JPanel contentPane = getPanel(Color.WHITE); 
     contentPane.setLayout(new GridBagLayout()); 

     JPanel leftPanel = getPanel(Color.BLUE); 
     JPanel rightPanel = getPanel(Color.RED); 
     JPanel bottomPanel = getPanel(Color.GREEN.darker()); 

     addComp(contentPane, leftPanel 
       , 0, 0, 0.7, 0.9, 1, 1, GridBagConstraints.BOTH); 
     addComp(contentPane, rightPanel 
       , 1, 0, 0.3, 0.9, 1, 1, GridBagConstraints.BOTH); 
     addComp(contentPane, bottomPanel 
       , 0, 1, 1.0, 0.1, 2, 1, GridBagConstraints.BOTH); 

     frame.setContentPane(contentPane); 
     //frame.pack(); 
     frame.setSize(300, 300); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    private void addComp(JPanel panel, JComponent comp 
          , int gridX, int gridY 
          , double weightX, double weightY 
          , int gridWidth, int gridHeight, int fill) 
    { 
     gbc.gridx = gridX; 
     gbc.gridy = gridY; 
     gbc.weightx = weightX; 
     gbc.weighty = weightY; 
     gbc.gridwidth = gridWidth; 
     gbc.gridheight = gridHeight; 
     gbc.fill = fill; 

     panel.add(comp, gbc); 
    } 

    private JPanel getPanel(Color backColour) 
    { 
     JPanel panel = new JPanel(); 
     panel.setOpaque(true); 
     panel.setBackground(backColour); 
     panel.setBorder(
      BorderFactory.createEmptyBorder(5, 5, 5, 5)); 

     return panel; 
    } 

    public static void main(String[] args) 
    { 
     Runnable runnable = new Runnable() 
     { 
      @Override 
      public void run() 
      { 
       new GridBagLayoutExample().displayGUI(); 
      } 
     }; 
     EventQueue.invokeLater(runnable); 
    } 
} 

Вот ВЫВОД того же:

GridBagLayoutExample

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