2013-05-09 3 views
0

JfreeChart를 일부 레이블과 함께 gridBagLayout에 배치하려고합니다. 나는 차트가 오른쪽에 있고, 프레임의 모든 공간을 수평 및 수직으로 가져 가고 프레임 너비의 90 %를 차지하고 싶습니다. 레이블은 프레임의 너비와 동일한 크기의 셀에 있어야합니다. 그래프, 각각 witdth의 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 _...이 스칼라입니까? – Reimeus

+0

예, 스 플랫 앱 – user221218

답변

1

왜 라벨에 '필요한 너비'와 '나머지 차트'를 제공하지 않습니까?

LINE_START에있는 레이블 GridLayout을 사용하여 수행 할 수 있습니다. BorderLayout입니다. 차트를 CENTER에 넣으십시오.

+0

에서 스윙을 사용하지만 라벨이 화면의 33 %를 차지하도록 세로로 확장되지 않습니다. – user221218

+0

ChartPanel이 PreferredSize를 반환하면 모든 LayoutManager가이 Dimension을 수락합니다. – mKorbel

2

당신은 또한 최소 크기를 반환 시도해 볼 수도 있습니다 (이 JTextField에 많이 발생)

사용할 수있는 공간의 크기를 선호하는 구성 요소 다음 작기 때문에이 일반적으로 발생이 frame.setResizable(false);

1

레이아웃이 구성 요소의 기본 크기를 수용 할 수없는 지점까지 GridBagLayout이 축소 될 때마다 즉시 각 구성 요소의 최소 크기가 사용됩니다. 이것은 모든 것을 즉시 작게 만드는 성가신 효과가 있습니다. 최소 폭이 단지 몇 픽셀 인 JTextFields에서 가장 일반적으로 관찰됩니다.

다행히도 쉽게 해결할 수 있습니다. 각 구성 요소의 최소 크기를 기본 크기로 설정하기 만하면됩니다. 예를 들면 다음과 같습니다.

chartPanel.setMiminumSize(chartPanel.getPreferredSize()) 

이제 weightx를 사용하십시오. 레이아웃의 공간에는 GridBagLayout 가중치가 사용되므로 레이블의 가중치는 0이어야합니다. 간단히 말해서 레이아웃이 필요할 때보 다 더 큰 공간이 주어지지 않는다는 것을 의미합니다 (일반적으로 사용자가 크기를 조정하여 프레임을 더 크게 만들었 기 때문).

모든 구성 요소의 가중치가 0이면 모든 여분의 공간이 가장자리에 유지되어 전체 레이아웃이 중앙에 위치하게됩니다. 이것이 레이아웃의 세로축에서 보는 것입니다. 각 행에 동일한 긍정적 인 weighty 값을 지정하면 행이 창을 세로로 채우도록 늘어납니다.

(사이드 참고 :.. 그들은 서로에 상대적으로 무게가 1 개까지 추가 할 필요가 없습니다 당신은 단지 각 차트의 행에 대해 weighty = 1 수행과 0의 weighty 다른 모든 행을 떠날 수 그래서)