2016-10-25 4 views
0

MigLayout을 사용하여 측량 목적으로 스윙 어플리케이션을 작성하고 있습니다. 불필요한 간격을 제거하려고합니다.Swing MigLayout - 불필요한 갭을 피할 수 없습니다.

나는 갭이 상단에 문장으로 인해 존재한다는 것을 이미 알아 챘다. 그러나 그것을 제거 할 때, 그것은 괜찮아 보입니다.

enter image description here

나는 문장을 추가하는 방법은 다음과 같습니다 :

add(text, "wrap, center, gap top 20"); 

그리고 버튼을 추가하는 방법 :

String wrap = shouldWrap(i) ? "wrap" : ""; 
this.add(button, "gapbefore 15, width 50, height 20, " + wrap); 

문제는 다음 그림에서 볼 수 있습니다

아무도 왜 그런 일이 일어나는지 설명해 주실 수 있습니까? 그리고 문장이있는 간격을 어떻게 제거 할 수 있습니까?

My JPanel in debug mode looks like this : 내 현재 기반 시설 작업하고 싶어

편집, 나는 MigLayout에서 디버그 모드를 설정 한 나는이 같은 것을 볼 수 ////////////

행의 모든 ​​첫 번째 구성 요소 주위의 테두리 크기가 "주어진 문과 일치하는 정도를 지정하십시오."문장의 크기와 일치하도록하는 이유가 궁금합니다.

MigLayout을 사용하는 모든 구성 요소에 대해 해당 옵션을 사용 중지 할 수있는 방법이 있습니까?

+0

둥근 모서리가있는 직사각형 회색 물체는 어떤 구성 요소입니까? 그것들은 ('ButtonGroup'에서)'JRadioButton'을 사용하기에 적합합니다. 각 라디오 버튼에는 '체크 박스'와 문자열이 포함되어 있으므로 라디오 버튼을 배치하기위한 'GridLayout'을 제안합니다. –

+0

직사각형 회색 객체는 JToggleButtons이며, 행의 각 7 개 버튼은 ButtonGroup에 그룹화되어 있습니다. 덕분에 몇 가지 aditionnal 레이아웃을 사용해 보겠습니다. :) – sokol1412

답변

0

단순히 JPanels를 중첩하지 않고 복합 레이아웃을 사용하지 않는 이유는 무엇입니까?

예를 들어 전체 JPanel은 JLabel 제목이 맨 위에있는 BorderLayout (BorderLayout.PAGE_START 항목)을 사용할 수 있으며 내부 JPanel은 MigLayout을 사용하고 구성 요소 격자를 보유하고 외부 JPanel의 BorderLayout .CENTER 위치.

1
당신은 단순히 함께 모여하는 X의 부분으로 행 분할됩니다 constraing "분할 x"를 사용할 수 있습니다

: 분할없이

을 :

public class SentenceExample { 

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

     panel.setLayout(new MigLayout()); 

     panel.add(new JLabel("Please, specify how much you agree with the given statements"), "wrap"); 

     panel.add(new JButton("1")); 
     panel.add(new JButton("2")); 
     panel.add(new JButton("3")); 
     panel.add(new JButton("4")); 
     panel.add(new JButton("5")); 
     panel.add(new JButton("6")); 
     panel.add(new JButton("7")); 
     panel.add(new JButton("8")); 
     panel.add(new JButton("9")); 
     panel.add(new JButton("10")); 

     frame.add(panel); 
     frame.setSize(900, 300); 
     frame.setLocationRelativeTo(null); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
    } 
} 

이는 다음과 같습니다

분할로

WithoutSplit

:

이의 첫 번째 JButton의 온라인 변경하면이에

panel.add(new JButton("1")); 

:

panel.add(new JButton("1"), "split 10"); 

당신의 GUI는 다음과 같이 표시됩니다

WithSplit

을 제약 조건이 "split 10"인 첫 번째 버튼은 10 개의 "슬롯"을 정렬합니다. 버튼 자체와 다음 9 개의 요소가 삽입됩니다.

모든 행의 첫 번째 버튼 (예 : 루프)에는이 작업을 수행하고 원하는 모양을 유지해야합니다.


편집 : 모든 첫 번째 버튼에 대한 루프를 사용하는 것이 너무 복잡 경우, 당신이 IE 7 열이함으로써, 패널 레이아웃 자체에 대한 열 제약 조건을 사용하여 이상 문장 범위를 만들 수 있습니다 여러 개의 열. 열 제약 조건을 만드는 방법은 여기 http://www.miglayout.com/QuickStart.pdf을 참조하십시오.

"split"을 사용하는 것이 더 쉬울 수도 있지만 열 제약 조건은 조금 더 깨끗합니다.

+0

감사합니다. m8, 좋은 답변 이네요! 그러나 나는 어제 아침 내 자신의 해결책을 발견했다. 나는 그것을 아래에서 설명 할 것이다. – sokol1412