2014-06-10 18 views
1

这里是我想要得到什么:什么是正确的GridbagLayout配置来获得这样的显示?

expected whole display

我面对的问题涉及到这右上部分:

expected display

我的代码,蓝色块拼命没有跨越这两个绿色块。它被卡住或者向左或向右(取决于我申请的权重,在为gridx和gridy值保持相同):

actual display

我有正确的gridx/gridy值,但我无法设法获得正确的权重。什么是正确的代码?

编辑:这里是一个最小的工作例如:

代码:

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