2010-07-07 4 views
3

JSeparator를 JToolBar 내부에 표시하는 데 문제가 있습니다. 다음과 같이 내 도구 모음이 생성됩니다addSeparator()가 JToolBar에서 작동하지 않는 이유는 무엇입니까?

public class ToolBar extends JToolBar { 
    super(); 

    FlowLayout layout = new FlowLayout(FlowLayout.LEFT, 10, 5); 
    setLayout(layout); 

    add(new JButton("Button 1")); 
    addSeparator(); 
    add(new JButton("Button 2")); 
    add(new JButton("Button 3")); 
    addSeparator(); 

    // Show 
    setVisible(true); 
    setFloatable(false); 

} 

어떤 생각이 정말 감사하겠습니다, 나는이를 호출 할 때,이 코드를 시도

+0

흠에 의해

// --------------------------------------- // debug below: // --------------------------------------- JSeparator separator = new JSeparator(JSeparator.VERTICAL); System.err.println("getMaximumSize(): " + separator.getMaximumSize()); System.err.println("getMinimumSize(): " + separator.getMinimumSize()); separator.setMaximumSize(new Dimension(2, separator.getMaximumSize().height)); // --------------------------------------- // real sample below // --------------------------------------- // adds a vertical space bar toolBar.add(Box.createHorizontalStrut(5)); // adds a vertical separator JSeparator separator = new JSeparator(JSeparator.VERTICAL); Dimension maximumSize = separator.getMaximumSize(); maximumSize.width = 2; separator.setMaximumSize(maximumSize); // Important! Update it! toolBar.add(separator); // adds a vertical space bar toolBar.add(Box.createHorizontalStrut(5)); 

당신이 제공 한 코드가 실제로 나는이 컴파일 모르겠어요, 사용하는 것입니다 확신합니다; 누락 된 메소드 선언은 무엇입니까? –

+0

fd, 모든 맞춤 코드를 삭제하여 의견을 제출했습니다. 이것은 쉽게 컴파일해야하며, 여전히 해결하기를 희망하는 문제를 보여줍니다. 감사! – Hamy

답변

4

(>이 너무 오래 이제 방법을 작동하도록하기 위해 노력 해왔다 addSeparator() 방법 그것은.

를 버튼 있지만 볼 분리 라인 사이의 공간을 생성하지만 addSeparator(new Dimension(20,20)) 상기 방법을 변경하면 그 후 가시 분리선을 생성한다.

문제 C를 디폴트의 ​​Look & Feel가 높이 1의 separator를 작성해, 그것을 표시 할 수 없게됩니다.

Mac OSX에서 실행 중입니다.

+0

그래, 그게 내가 만난 동일한 해결 방법입니다. 나는 이것이 기본 OS X LAF의 문제일지도 모른다라고 생각한다. – Hamy

+0

툴바에 기본 레이아웃을 남겨두면 점선도 거기에 나타난다. – Trejkaz

2

가장 큰 문제는 JToolBar의 하위 클래스를 만들고 레이아웃을 설정할 필요가 없다는 것입니다. 인스턴스를 만들고 단추와 구분 기호를 추가하기 만하면됩니다.

일반적으로 스윙 팀은 스윙 구성 요소의 하위 클래 싱을 권장하지 않습니다. 마지막 조언이 버튼을 사용하지 않는 것

JToolBar t = new JToolbar(); 

t.add(new JButton("Button 1")); 
t.addSeparator(); 
t.add(new JButton("Button 2")); 
t.add(new JButton("Button 3")); 
t.addSeparator(); 

// Show 
t.setVisible(true); 
t.setFloatable(false); 

: 같은

당신의 코드가 보일 것입니다. 동작을 사용하십시오. 이 방법은 도구 모음, 메뉴 등에서 동일한 동작을 사용할 수 있습니다. 도구 모음의 구분이 보이는 방법은 사용중인 LAF에 따라 달라집니다 http://java.sun.com/docs/books/tutorial/uiswing/misc/action.html

UPDATE에서 더 많은 정보를 원하시면.

+0

유진 제, 저는 실제로 이것으로 어려움을 겪고 있습니다. 서브 클래 싱 된 항목이 많이 있습니다. JToolbar, JPanel, JButton 등입니다. 대부분 서브 클래스 일 필요는 없습니다. 나는 모든 코드를 단일 메서드 나 단일 클래스로 작성하지 않으려 고 노력했다 !! 할 수는 있지만 20 페이지 길이로 유지하기가 어렵습니다. 어떤 의미에서 서브 클래 싱은 올바른 일이 아니라는 것을 압니다. 그러나 나는 유지할 수없는 거대한 파일도 원하지 않습니다. (기본적으로, 저는 여기에서 '올바른'대답을 모르겠습니다. – Hamy

+2

가장 일반적인 방법은 "빌드"메서드를 만드는 것입니다. 예를 들어 도구 모음을 만들려면 도구 모음을 만들고 구성하고 반환하는 JToolBar buildToobar() 메서드를 만듭니다. Swing 구성 요소를 하위 클래스로 분류해야하는 경우는 새 상태 및/또는 비헤이비어를 추가해야하는 경우입니다. –

+0

흠. 저는 Factory 클래스를 사용할 수 있다고 가정합니다. 그래서 메인 클래스가 build ...() 메소드로 부 풀리게되는 것을 끝내지 않았습니까? – Hamy

0

같은 문제가 발생했습니다. 근본 원인이 최대 크기에서 비롯된 것으로 나타났습니다.

조정 후 정상적으로되었습니다. TJ 영 ([email protected])

관련 문제