2012-01-21 3 views
1

일부 변수를 선택하고 선택된 변수를 다시 정렬 할 수있는 상자를 만들려고합니다. 왼쪽 상자가 채워지기 시작하면 오른쪽 상자가 비어 있습니다. 항목을 왼쪽에서 오른쪽으로 이동하고 오른쪽에서 순서를 다시 정렬 할 수 있습니다 (위 및 아래 버튼 사용). 이를 통해 원하는 항목과 순서 (프로그램의 다른 섹션에서 정렬 목적으로)를 선택할 수 있습니다.SWT 레이아웃 선택

내가 좋아하는이 같은의 외모거야 레이아웃 : 불행하게도

enter image description here

, 그것은 :-(... 밖으로 잘 ... 같은오고

enter image description here

내가 모든 작업을 찾고있는 기능. 예. 레이아웃과 함께 매우 힘든 시간을 보내고 있습니다. 다음 4 가지 주요 목표에 도달 할 수 있다면, 설정 될 것입니다.

  1. 멀티의 위 부분 대신 하단의 확인 및 취소 버튼을 어떻게 얻을 수 있습니까?
  2. 멀티를 미리 설정된 크기로 가져 오려면 어떻게해야합니까? (예 : ... 10)
  3. 어떻게 화살표 단추를 가로로 세로로 쌓을 수 있습니까?
  4. 두 개의 멀티간에 화살표 단추를 표시하려면 어떻게해야합니까? 나는이 특히 각각의 목표를 파악

아마 보조 노트에

, 나는 GridLayout과를 사용하고 한 - 라이너, 여기 저기 배관 아마도 조금 ...입니다 - 이것은이 될 수 있습니다 가난한 선택. 이 같은 것을 위해 더 나은 선택이 있습니까? 속히

, 여기

@Override 
protected Control createDialogArea(Composite parent) { 
    parent.getShell().setText("Multi-sort"); 

    Composite dialogcomp = new Composite(parent, SWT.NONE); 
    dialogcomp.setLayout(new GridLayout(3, false)); 

    available = new List(getShell(), SWT.BORDER | SWT.V_SCROLL); 
    for(String t : MultiSortDialog.availableNames) { 
     available.add(t); 
    } 
    used = new List(getShell(), SWT.BORDER | SWT.V_SCROLL); 
    for(String t : MultiSortDialog.usedNames) { 
     used.add(t); 
    } 
    createButton(parent, ADD, ">", false); 
    createButton(parent, REM, "<", false); 
    createButton(parent, UP, "^", false); 
    createButton(parent, DOWN, "V", false); 

    return dialogcomp; 
} 

답변

1
  1. 내가 당신에게 간단한 사용 Dialog의 기본 확인을 제안하고 버튼을 취소하고 배치하는 것을 시도하지 않을 ...이 무서운 혼란을 생성하는 코드입니다 너 스스로. SWT는 시스템 기본 위치에 시스템을 배치 할 수있는 좋은 시스템입니다 (즉, Mac OS에서 올바른 위치 인 올바른 위치에 OK 버튼이 있습니다)

  2. Dialog.createButton()을 사용하여 버튼을 만들지 마십시오. 이렇게하면 대화 상자에 버튼이 생기고, 실제로는 원하지 않는 것처럼 들리지만 실제로는 그렇지 않습니다. 이 버튼은 확인 또는 취소 버튼의 스타일로 버튼을 만듭니다.이 버튼은 Dialog 클래스가 소유하고 하단 행의 OK/Cancel 버튼에 맞게 스타일이 지정된 버튼 막대 합성에 배치해야합니다. 당신은 만들고있는 합성물에 새로운 버튼을 만들고 싶습니다. 즉 :

Button addButton = new Button(dialogcomp, SWT.PUSH); 
    addButton.setText(">"); 
    addButton.addSelectionListener(...); 
  1. 가 수직으로 버튼을 스택을 포함하는 내부 dialogcomp을 새로운 합성을 만들 수 있습니다.

  2. List 사이에 화살표 단추를 넣으려면 올바른 순서로 항목을 추가해야합니다. GridLayout으로 표시하려면 위젯을 원하는 순서대로 추가해야합니다.

다른 점 :

  1. Shell.setText()를 호출하여 대화 상자의 제목을 변경하지 마십시오.

  2. 부모 껍질 안에 List의 부모를 보려고하지 마십시오. 당신은 물건을 넣기 위해 합성물을 받게됩니다. 이것은 당신의 레이아웃을 혼란에 빠뜨릴 것입니다. 기본적으로 위젯을 소유하지 않고 레이아웃하지 않는 것으로 끌어 올립니다. 대신 작성한 Composite에 입력하십시오.

  3. 간단히 < 기호를 그리는 대신 SWT.ARROW | SWT.LEFT 단추를 만들 수도 있습니다. 시각적으로 더 매력적일 수 있습니다. 조사 할만한 것. 제대로 Button의를 생성하고 버튼을 보유 할 새 복합을 만드는

코드의 간단한 재배치, 당신은 훨씬 더 가까이 얻을 것이다 :

Composite dialogcomp = new Composite(parent, SWT.NONE); 
dialogcomp.setLayout(new GridLayout(3, false)); 

available = new List(dialogcomp, SWT.BORDER | SWT.V_SCROLL); 
for(String t : MultiSortDialog.availableNames) { 
    available.add(t); 
} 

Composite buttonComposite = new Composite(dialogcomp, SWT.NONE); 
buttonComposite.setLayout(new GridLayout(1, false)); 

Button addButton = new Button(buttonComposite, SWT.PUSH); 
addButton.setText(">"); 

Button removeButton = new Button(buttonComposite, SWT.PUSH); 
removeButton.setText("<"); 

Button upButton = new Button(buttonComposite, SWT.PUSH); 
upButton.setText("^"); 

Button downButton = new Button(buttonComposite, SWT.PUSH); 
downButton.setText("v"); 

used = new List(dialogcomp, SWT.BORDER | SWT.V_SCROLL); 
for(String t : MultiSortDialog.usedNames) { 
    used.add(t); 
} 

이 아마에 당신이 아주 가까이 얻을 것이다 당신이 원하는. 그러나 각 인스턴스에 대해 GridData을 적용하려고합니다. 예를 들어 List 두 개가 가로형 및 세로 형으로 채우고 Dialog의 크기를 조정할 때 레이아웃을 채울 수 있습니다. 그러나 나는 그것을 독자를위한 운동으로 남겨 둘 것입니다.

+0

독자를위한 운동은 저에 의해 좋습니다. 이것은 코드 없이도 내가 찾고있는 것입니다! 간단한 점은이 점을 훌륭한 대답으로 만듭니다. 코드 스 니펫은 케이크 위에 장식되어 있습니다. 정말 고맙습니다! 상황이 어떻게 바뀌 었는지 알려 드리겠습니다. :-) – corsiKa

+0

주말 근무를위한 yay. 이것은 거대한 도움이되었습니다. 몇 가지 메모 - 나는 dialogcomp를 getShell() 대신에'used'의 부모로 사용하고, 제거 버튼의 텍스트를 수정했습니다 (뒤집어 야했습니다). 나는 이미 자신의 행동에 대해 이미 작성되고 작동 및 테스트 된 방법을 호출 한 선택 리스너를 추가했습니다. 나는 여전히 디폴트 OK와 Cancel 버튼을 추가 할 필요가있다. (이전에 사용했던 버튼은 실제로 사용하지 않았지만 실제로는 켜지지 않았다.)하지만 그것은 매력처럼 작동한다. 사고 과정을 설명 할 시간을 가져 주셔서 대단히 감사합니다. 코드보다 10 배 이상 가치가 있습니다 !! – corsiKa

+0

내가 볼 수없는 것은 객관적인 # 2입니다. "이 목록을 두 줄 모두 10 열 눈에 보이게하십시오"라고 쉽게 말할 수있는 방법을 찾을 수 없습니다. 이견있는 사람? – corsiKa

관련 문제