2012-04-19 2 views
0

원래 탑 탭 방향 설정 :JTabbedPane에 간격

http://dl.dropbox.com/u/3238736/screenshots/Screenshot-PasswordStore-1.png

문제있는 오른쪽 탭 방향 설정 : GUI 위부터

enter image description here

, 내 JTabbedPane에 (오른쪽의 파란색 탭)가 "종료"버튼 (GlassPane을 사용하여 렌더링 됨)과 중첩됩니다.

참고 : 종료 버튼은 GlassPane을 사용하여 오른쪽 상단에 렌더링됩니다.

기술 "종료"버튼에 간격을두기 위해 파란색 탭 이동에 대한 조언을 원하십니까? 아래와 같이 종료 버튼을 삽입의 GlassPane을 만드는

번호 :

public void addUniversalQuitBtn() { 
    // Thanks to http://www.java-forums.org/awt-swing/12267-how-add-jbutton-tabbed-pane-headder.html forum post regarding adding a button on glasspane. 
    Rectangle tabBounds = mainTabPane.getBoundsAt(0); 
    Container glassPane = (Container) this.getRootPane().getGlassPane(); 
    glassPane.setVisible(true); 
    glassPane.setLayout(new GridBagLayout()); 
    GridBagConstraints gbc = new GridBagConstraints(); 
    gbc.weightx = 1.0; 
    gbc.weighty = 1.0; 
    gbc.fill = GridBagConstraints.NONE; 
    gbc.insets = new Insets(tabBounds.y, 0, 0, 10); 
    gbc.anchor = GridBagConstraints.NORTHEAST; 
    quitBtn.setPreferredSize(new Dimension(quitBtn.getPreferredSize().width, (int) tabBounds.getHeight() - 2)); 
    glassPane.add(quitBtn, gbc); 

} 

감사합니다.

+2

왜 겹치지 않으려면 유리 창을 사용하고 있습니까? 레이아웃 관리자가 당신을 위해 이러한 일을하도록하십시오. – keuleJ

+0

탭이 위를 향하게 설정되면 종료 버튼은 탭 옆에 잘 정렬되지만 탭이 오른쪽으로 향하면 겹칩니다. 오른쪽 상단에 종료 버튼이 있습니다. JFrame의 닫기 버튼은 창을 시스템 트레이로 아이콘 화하여 응용 프로그램을 종료 할 수있는 종료 버튼을 추가해야합니다. – thotheolh

+0

그 중 어느 부분이 '유리창'의 사용법을 설명합니까? –

답변

0

확인. (TabbedPane이 오른쪽으로 향한 경우 표시됨)

1

글쎄, 내게 약간 이상하게 들리지만, 글래스패스에 1 개 (TabbedPane이 위쪽으로 향한 경우 표시)

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

    Insets current = UIManager.getInsets ("TabbedPane.tabAreaInsets"); 
    UIManager.put ("TabbedPane.tabAreaInsets", 
      new Insets (current.top, 40, current.bottom, current.right)); 

    JTabbedPane tabbedPane = new JTabbedPane(); 
    tabbedPane.setTabPlacement (JTabbedPane.RIGHT); 
    tabbedPane.addTab ("Tab 1", new JLabel()); 
    tabbedPane.addTab ("Tab 2", new JLabel()); 
    frame.add (tabbedPane); 

    UIManager.put ("TabbedPane.tabAreaInsets", current); 

    JTabbedPane tabbedPane2 = new JTabbedPane(); 
    tabbedPane2.setTabPlacement (JTabbedPane.RIGHT); 
    tabbedPane2.addTab ("Tab 3", new JLabel()); 
    tabbedPane2.addTab ("Tab 4", new JLabel()); 
    frame.add (tabbedPane2, BorderLayout.SOUTH); 

    frame.setSize (400, 400); 
    frame.setLocationRelativeTo (null); 
    frame.setVisible (true); 
} 
: 나는

그래서 여기에 솔루션의 일종입니다 ... 당신이 그런 식으로 넣을 수 없습니다 JTabbedPane에 일부 적당한 용기 만의 standart 스윙과의 glassPane에서 종료 버튼을 이동할 수 있습니다 것

첫 번째 탭이있는 창 (맨 위)은 윗면과 탭 사이에 30px 간격이 있습니다. 두 번째 탭 창에는 기본 간격 설정이 있습니다.

"TabbedPane.tabAreaInsets"키 아래에서 인세 트를 변경하면 탭 실행과 탭 패널면 사이의 간격을 조작 할 수 있습니다. 탭 위치가 TOP와 다른 경우 해당 인 세트가 회전된다는 점에 유의하십시오. 오른쪽 텝 위치로 맨 위 간격을 수정하려면, 예에서와 같이 왼쪽 상단을 수정해야하지만 위쪽 탭은 수정하면 안됩니다.

이전의 Insets 값을 다시 입력해야합니다. 그렇지 않으면 변경 후에 변경된 모든 탭 창에 영향을 미칩니다.

또한 모든 기본 UI에서 작동한다는 보장 할 수는 없지만 이러한 기본 기능을 지원해야한다고 생각합니다. 적어도 Windows, Mac OS 및 Metal LaF에서 지원됩니다.

한 가지 더 - 생성 된 탭을 특정 시스템 UI에 저장하고 그 값을 업데이트 할 수 없기 때문에 이미 만들어진 탭 패널의 런타임에 탭 영역 삽입을 변경할 수 없습니다 리플렉션 "기능"을 사용하지 않고 사적인 필드에 폭력적으로 액세스하지 않고). 따라서 탭 간격의 한 종류에서만 간격을 원할 경우 탭 분할 창을 다시 작성해야합니다.