2015-10-13 3 views
0

увеличить размер строки в GridLayout

выше кадр содержит GridLayout с двумя рядами. Первая строка - это текстовая область, вторая - панель с двумя флажками. Я хочу увеличить высоту первого ряда, так что первая строка должна составлять 75% от общей высоты, а вторая строка должна быть 25%. Как я могу это сделать? Вот мой фрагмент кода:

setLayout(new GridLayout(2, 0, 0, 0));  
    Panel text_panel = new Panel(); 
    add(text_panel); 
    text_panel.setLayout(new GridLayout(1, 0, 0, 0)); 
    JTextArea textArea = new JTextArea(); 
    textArea.setText("text to be displayed"); 
    JScrollPane scroll = new JScrollPane (textArea); 
    text_panel.add(scroll); 
    textArea.setLineWrap(true); 
    textArea.setWrapStyleWord(true); 
    textArea.setEditable(false); 
    Border border = BorderFactory.createLineBorder(Color.GRAY); 
    textArea.setBorder(border); 
    textArea.setFont(new Font("Arial",Font.PLAIN,12)); 
    textArea.setCaretPosition(0); 
    textArea.requestFocus(); 
    Panel checebox_panel = new Panel(); 
    checebox_panel.setBackground(Color.WHITE); 
    add(checebox_panel); 
    checebox_panel.setLayout(new GridLayout(1, 0, 0, 0)); 


    androidCheckBox = new JCheckBox("Open start page"); 
    androidCheckBox.setBackground(Color.WHITE); 
    androidCheckBox.addItemListener(itemListener); 
    androidCheckBox.setSelected(true); 
    checebox_panel.add(androidCheckBox); 

    eclipseCheckBox = new JCheckBox("register for updates"); 
    eclipseCheckBox.setBackground(Color.WHITE); 
    eclipseCheckBox.addItemListener(itemListener); 
    eclipseCheckBox.setSelected(true); 
    checebox_panel.add(eclipseCheckBox); 
+2

Я бы порекомендовал вам использовать 'BorderLayout' для этого сценария, поместив textArea в CENTER, а остальное в SOUTH. но f вы действительно хотите иметь 75%/25%, вместо этого вы должны использовать 'GridBagLayout'. просто найдите учебники онлайн или используйте внутренний JavaDocs. – hoijui

+0

Почему 75%/25%? Это просто случайные числа. Я также согласен, что вы должны просто использовать BorderLayout. Флажки с фиксированным размером и текстовой областью будут автоматически изменяться по мере изменения размера рамки. – camickr

ответ

1

С GridLayout вы не можете иметь две строки, которые имеют разные размеры. Посмотрите на BoxLayout. Что-то вроде этого:

JPanel content = new JPanel(); 
frame.getContentPane().add(content); 
LayoutManager layout = new BoxLayout(content, BoxLayout.Y_AXIS); 
Box boxes[] = new Box[2]; 
boxes[0] = Box.createHorizontalBox(); 
boxes[1] = Box.createHorizontalBox(); 

boxes[0].createGlue(); 
boxes[1].createGlue(); 

content.add(boxes[0]); 
content.add(boxes[1]); 

JPanel panel = new JPanel();  
JPanel panel2 = new JPanel(); 

panel.setPreferredSize(new Dimension(500,300)); 
panel2.setPreferredSize(new Dimension(500,200)); 

boxes[0].add(panel); 
boxes[1].add(panel2); 

Использование setPreferredSize никогда не является оптимальным, но это работает. Это всего лишь пример того, как вы могли это сделать, я уверен, что есть лучшие способы! ;)

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