2014-02-18 4 views
0

Я искал часы, но все равно не могу найти ответ, который мне нужен.GridBagLayout с JPanels

Итак, я пытаюсь настроить простой макет, и все, что я хочу, это GridBagLayout , который содержит два JPanels. Макет сборки должен выглядеть на изображении ниже.

+3

Пытались ли вы что-нибудь? Скорее всего, никто не начнет кодировать вашу работу для вас здесь. – Zavior

+0

Ответ на что? В чем твоя проблема? Где вы застряли? Все, что вам нужно, объясняется здесь http://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html, первое место, которое вы, наверняка, уже прочитали после нескольких часов расследования. Теперь, что не ясно? – DSquare

+0

Для этого может работать макет мешков с сеткой, на левой панели будет gridx = 0, а справа - gridx = 1. Вы можете получить разные размеры с полем weightx GridBagConstraints. Как сказал @Zavior, идите и попробуйте это и опубликуйте свой явный вопрос/где вы застреваете, и я буду рад помочь больше. – hankd

ответ

0

I'v получил его с помощью BoxLayout.

import java.awt.Color; 


public class ProportionalPanels extends JFrame { 

private JPanel contentPane; 

/** 
* Create the frame. 
*/ 
public ProportionalPanels() { 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setBounds(100, 100, 450, 300); 
    contentPane = new JPanel(); 
    contentPane.setBorder(new EmptyBorder(0, 0, 0, 0)); 
    setContentPane(contentPane); 
    contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.X_AXIS)); 

    final JPanel panel_A = new JPanel(); 
    panel_A.setBackground(new Color(255, 165, 0)); 
    contentPane.add(panel_A); 

    final JPanel panel_B = new JPanel(); 
    panel_B.setBackground(new Color(176, 196, 222)); 
    contentPane.add(panel_B); 

    panel_A.setMinimumSize(new Dimension(0, 0)); 
    panel_B.setMinimumSize(new Dimension(0, 0)); 

    panel_A.setPreferredSize(new Dimension(0, 0)); 
    panel_B.setPreferredSize(new Dimension(0, 0)); 

    panel_A.setMaximumSize(new Dimension(Short.MAX_VALUE/5, Short.MAX_VALUE)); 
    panel_B.setMaximumSize(new Dimension(Short.MAX_VALUE, Short.MAX_VALUE)); 

    addComponentListener(new ComponentAdapter() { 
     @Override 
     public void componentResized(ComponentEvent e) { 
      System.out.printf("Panel width rate: %.2f %n", 
        panel_B.getSize().width/(double) panel_A.getSize().width); 
     } 
    }); 
} 

/** 
* Launch the application. 
*/ 
public static void main(String[] args) { 
    ProportionalPanels frame = new ProportionalPanels(); 
    frame.setVisible(true); 
} 

}

+0

Спасибо! Ты классный :) – user3324382

+0

Если это действительно помогло, вы могли бы также отметить ответ как полезный) –

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