2015-08-24 2 views
1

Я уверен, что этот вопрос может быть дубликат, но все же я отправляю сообщения, так как не могу найти решение/исправить ошибку в моем коде. Часть моего графического интерфейса Java использует GridBagLayout. Этот макет будет иметь 3 компонента, 2 переключателя будут сверху (размещены бок о бок), а остальное пространство должно иметь JPanel (начиная со следующей строки под переключателями до конца доступного пространства). Я рассматривал разные примеры, как на форуме, так и снаружи, но не могу решить проблему.Как настроить размер JPanel в GridBagLayout?

С помощью следующего кода, мой GUI раздел выглядит примерно так:

enter image description here

ImageDisplay = new JPanel(new GridBagLayout()); 
     GridBagConstraints g = new GridBagConstraints(); 
     g.insets = new Insets(5, 5, 5, 5); // insets for all components 


     rawImage = new JRadioButton("Raw", true); 
     peakPickedImage = new JRadioButton("Peak picked"); 
     radioButtonGroup.add(rawImage); 
     radioButtonGroup.add(peakPickedImage); 

     g.fill = GridBagConstraints.HORIZONTAL; 
     g.gridx = 0; 
     g.gridy = 0; 
     g.gridwidth = 1; 
     g.gridheight = 1; 

     ImageDisplay.add(rawImage, g); 

     g.gridx = 1; 
     g.gridy = 0; 
     g.gridwidth = 1; 
     g.gridheight = 1; 
     g.weightx = 0; 
     g.weighty = 0; 

     ImageDisplay.add(peakPickedImage, g); 

     JPanel imagePanel = new JPanel(); 
     g.gridx = 0; 
    // g.gridy = 0; 
     g.weightx = 1.0; 
     g.weighty = 0.75; 
     g.gridwidth = 3; 
     g.gridheight = 3; 
     // g.fill = GridBagConstraints.BOTH; 

     // g.fill = GridBagConstraints.SOUTH; 

     imagePanel.setBorder(BorderFactory.createEtchedBorder()); 

     ImageDisplay.add(imagePanel, g); 

и, раскомментирован

g.fill = GridBagConstraints.BOTH; 

я получаю JPanel, который включает в себя как радиокнопки внутри него. Как решить эту проблему?

ответ

1

Попробуйте так:

 JPanel ImageDisplay = new JPanel(new GridBagLayout()); 
    GridBagConstraints g = new GridBagConstraints(); 
    g.insets = new Insets(5, 5, 5, 5); // insets for all components 
    g.weightx = 0.0; 
    g.weighty = 0.0; 

    JRadioButton rawImage = new JRadioButton("Raw", true); 
    JRadioButton peakPickedImage = new JRadioButton("Peak picked"); 
    ButtonGroup radioButtonGroup = new ButtonGroup(); 
    radioButtonGroup.add(rawImage); 
    radioButtonGroup.add(peakPickedImage); 

    g.fill = GridBagConstraints.HORIZONTAL; 
    g.gridx = 0; 
    g.gridy = 0; 
    g.gridwidth = 1; 
    g.gridheight = 1; 

    ImageDisplay.add(rawImage, g); 

    g.gridx = 1; 
    g.gridy = 0; 

    ImageDisplay.add(peakPickedImage, g); 

    JPanel imagePanel = new JPanel(); 
    g.gridx = 0; 
    g.gridy = 1; 
    g.gridwidth = 2; 
    g.weightx = 1.0; // fill the rest of the space 
    g.weighty = 1.0; 
    g.fill = GridBagConstraints.BOTH; 

    imagePanel.setBorder(BorderFactory.createEtchedBorder()); 

    ImageDisplay.add(imagePanel, g); 

С наилучшими пожеланиями, Зоран

+0

Он работал, как хотел :) – novicegeek