2011-03-29 1 views
3

JTabbedPane에서 오른쪽 및 왼쪽 (즉, setTabPlacement(JTabbedPane.RIGHT))의 모양을 좋아하는 탭 배치를 우연히 발견했습니다. 내가 필요한 것은 탭 아래에 놓인 공간을 활용하는 것입니다. 현재 JButton 열이 있지만 빈 공간이 많아 측면으로 밀려납니다.오른쪽 방향 JTabbedPane의 탭 아래에 구성 요소를 배치하는 방법

이 작업을 수행하는 방법에 대한 의견이 있으십니까? 어떤 종류의 맞춤형 오버레이 또는 무엇인가?

Here's a screenshot. 코드에서 기본적으로 JTree 위에 JTabbedPane이있는 가로로 정렬 된 Box가 있고 그 다음에 버튼 열이 있습니다.

boxOfEverything.add(tabbedPane); 
boxOfEverything.add(boxColumnButtons); 

Screenshot here.

+0

사진과 코드를 게시하십시오. – Manoj

답변

1

이 답변은 내 것이 아니기 때문에 이것을 community wiki으로 만들었습니다. @cheesecamera가 같은 질문을 다른 forum에 게시 한 것으로 보입니다. 대답을 찾아 여기에 오는 사람들이 대답을 얻을 수 있도록 대답을 복사했습니다.

아이디어는 스윙의 glasspane을 사용하는 것입니다.

import java.awt.*; 
import javax.swing.*; 

public class RightTabPaneButtonPanel { 

    public static void main(String[] args) { 
    SwingUtilities.invokeLater(new Runnable() { 

     @Override 
     public void run() { 
     new RightTabPaneButtonPanel().makeUI(); 
     } 
    }); 
    } 

    public void makeUI() { 
    JTabbedPane tabbedPane = new JTabbedPane(); 
    tabbedPane.setTabPlacement(JTabbedPane.RIGHT); 
    JPanel panel = new JPanel(new GridLayout(0, 1)); 

    for (int i = 0; i < 3; i++) { 
     JPanel tab = new JPanel(); 
     tab.setName("tab" + (i + 1)); 
     tab.setPreferredSize(new Dimension(400, 400)); 
     tabbedPane.add(tab); 

     JButton button = new JButton("B" + (i + 1)); 
     button.setMargin(new Insets(0, 0, 0, 0)); 
     panel.add(button); 
    } 

    JFrame frame = new JFrame(); 
    frame.add(tabbedPane); 
    frame.pack(); 
    Rectangle tabBounds = tabbedPane.getBoundsAt(0); 

    Container glassPane = (Container) frame.getGlassPane(); 
    glassPane.setVisible(true); 
    glassPane.setLayout(new GridBagLayout()); 
    GridBagConstraints gbc = new GridBagConstraints(); 
    gbc.weightx = 1.0; 
    gbc.weighty = 1.0; 
    gbc.fill = GridBagConstraints.NONE; 
    int margin = tabbedPane.getWidth() - (tabBounds.x + tabBounds.width); 
    gbc.insets = new Insets(0, 0, 0, margin); 
    gbc.anchor = GridBagConstraints.SOUTHEAST; 

    panel.setPreferredSize(new Dimension((int) tabBounds.getWidth() - margin, 
      panel.getPreferredSize().height)); 
    glassPane.add(panel, gbc); 

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setLocationRelativeTo(null); 
    frame.setVisible(true); 
    } 
}