2013-05-09 15 views
0

我试图将一个JfreeChart与一些标签一起放在gridBagLayout上。我希望图表位于右侧,横向和纵向占据框架的所有空间,并且跨越框架宽度的90%。标签应该位于相同大小的单元格中,在左侧图表,每个占10%和33%的高度。到目前为止,代码如下所示:GridBagLayout - 放置图表和标签

val chartPanel = new ChartPanel(chart, true, true, true, true, true) 

    //layout 
    setLayout(new GridBagLayout()) 
    val c = new GridBagConstraints() 

    //natural height, maximum width 
    c.fill = GridBagConstraints.BOTH 
    c.gridx = 1 
    c.gridy = 0 
    c.weightx = 0.9 
    add(chartPanel, c) 

    val label = new JLabel("Count: ") 

    val c2 = new GridBagConstraints() 
    c2.fill = GridBagConstraints.VERTICAL 
    c2.gridx = 0 
    c2.gridy = 0 
    c2.weightx = 0.1 
    add(label, c2) 

    val label2 = new JLabel("Count2: ") 
    val c3 = new GridBagConstraints() 
    c3.fill = GridBagConstraints.VERTICAL 
    c3.gridx = 0 
    c3.gridy = 1 
    c3.weightx = 0.1 
    add(label2, c3) 


    val label3 = new JLabel("Count3: ") 
    val c4 = new GridBagConstraints() 
    c4.fill = GridBagConstraints.VERTICAL 
    c4.gridx = 0 
    c4.gridy = 2 
    c4.weightx = 0.1 
    add(label3, c4) 

和我收到的画面是这样的:

enter image description here

此外,bizzarly,当我调整屏幕,我看到的是:

enter image description here

就好像整个图表大大缩小......任何想法如何解决这个问题?非常感谢

+0

_val chartPanel _...这是Scala吗? – Reimeus 2013-05-09 11:03:58

+0

是的,使用从斯卡拉应用 – user221218 2013-05-09 11:08:13

回答

1

为什么不给标签“他们需要的宽度”和图表“休息”?

这可能在BorderLayoutLINE_START使用标签的单个列GridLayout来完成。将图表放入CENTER

+0

摆动,但然后标签将不会垂直扩大占屏幕的33%,对吧? – user221218 2013-05-09 11:04:21

+0

ChartPanel应该返回PreferredSize,那么所有的LayoutManagers都会接受这个Dimension – mKorbel 2013-05-09 11:10:03

2

您可以使用此frame.setResizable(false);

1

这通常是因为可用的空间更小则首选大小的组件(这个很多情况与JTextField

您也可以尝试返回一个最小尺寸。

1

只要GridBagLayout缩小到布局无法容纳组件的首选大小的程度,它就会立即使用每个组件的最小大小。这具有令所有东西变得微小的恼人效果。 (最常用JTextFields观察,其最小宽度仅为几个像素)。

幸运的是,它很容易解决:只需将每个组件的最小大小设置为其首选大小即可。例如:

chartPanel.setMiminumSize(chartPanel.getPreferredSize()) 

现在,就使用weightx。 GridBagLayout权重用于布局中的额外空间,因此您的标签应该具有零权重。这仅仅意味着当布局大于需要时它们将永远不会被赋予任何额外的空间(通常是因为用户通过调整大小来增大框架)。

当所有组件的权重为零时,任何多余的空间都保留在边缘上,导致整个布局居中。这是你在布局的垂直轴上看到的。为每行赋予相同的正值weighty,行将伸展以垂直填充窗口。

(旁注:砝码不需要加起来1,因为它们是相互所以你也可以为每个图表行做weighty = 1,并保留所有其他行具有零weighty