2014-06-10 2 views
1

Вот что я хочу получить:Какова была бы правильная конфигурация GridbagLayout для получения такого дисплея?

expected whole display

Проблема я столкнулся с этим относится к правой верхней части:

expected display

С моим кодом, синий блок отчаянно не охватывая под оба зеленых блоков. Он застревает либо влево или вправо (в зависимости от веса я применяю, в gridx и Gridy значений остаются теми же самыми):

actual display или

У меня есть правильные/Gridy значения gridx, но я не может получить правильные веса. Какой будет правильный код?

Edit: здесь есть минимальный рабочий пример:

Код:

import java.awt.Color; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.Insets; 

import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 

public class Test { 

public static void main(String[] args) { 
    JFrame frame = new JFrame(); 
    JPanel panel = new JPanel(); 

    frame.add(panel); 

    panel.setLayout(new GridBagLayout()); 

    JLabel score1 = new JLabel("Score1"); 
    JLabel score2 = new JLabel("Score2"); 
    JLabel team1 = new JLabel("Team1TestTest"); 
    JLabel team2 = new JLabel("Team2TestTest"); 
    JLabel clock = new JLabel("Clock"); 

    // Layout 
    GridBagConstraints gbc = new GridBagConstraints(); 
    gbc.fill = GridBagConstraints.BOTH; 
    gbc.insets = new Insets(10,10,10,10); 
    gbc.anchor = GridBagConstraints.CENTER; 

    gbc.weighty = gbc.weightx = 1; 

    // First two lines 
    gbc.gridy=0; 

    // -teams 
    gbc.gridx=0; 
    gbc.gridheight = 1; 
    gbc.gridwidth = 2; 
    panel.add(team1,gbc); 
    gbc.gridx=2; 
    gbc.gridheight = 1; 
    gbc.gridwidth = GridBagConstraints.REMAINDER; 
    panel.add(team2,gbc); 

    // -score 1 
    gbc.gridy=1; 
    gbc.gridx=0; 
    gbc.gridheight = 1; 
    gbc.gridwidth = 1; 
    panel.add(score1,gbc); 
    // -clock 
    gbc.gridx=1; 
    gbc.gridheight = 1; 
    gbc.gridwidth = 2; 
    panel.add(clock,gbc); 
    // -score 2 
    gbc.gridx=3; 
    gbc.gridheight = 1; 
    gbc.gridwidth = GridBagConstraints.REMAINDER; 
    panel.add(score2,gbc); 

    frame.setContentPane(panel); 
    frame.setVisible(true); 
    frame.pack(); 

    while(true) {} 
} 
} 

Результат:

actual MCVE result

+1

Было бы полезно иметь ваш фактический код в качестве отправной точки. –

+1

для лучшей помощи, пожалуйста, отправьте сообщение [MCVE] (http://stackoverflow.com/help/mcve), которое демонстрирует проблему. – Frakcool

+0

Редактировать: добавлен MCVE. – Silverspur

ответ

3

Вы можете создать еще одну GridBagLayout панель и добавить его в первой панели, как левая часть второго ряда с шириной равна 4.

enter image description here

+1

Я думал, что все может быть сделано в одном макете. Слишком плохо ... А почему 5? – Silverspur

+0

Моя ошибка. Я думаю, 4 :) У меня была такая же проблема, и я решил это так. –

+1

Чтобы получить действительно хорошие макеты жидкостей в Swing, я обычно использую много и много jpanels для всех вещей, которые похожи или должны действовать как единое целое. – hooknc

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