2016-10-29 3 views

답변

2

JTabbedPane에 정말 할 수 없습니다. TabbedPaneUI를 해킹하는 것이 가능하다고 생각하지만 신뢰할 수 있다고 생각하지는 않습니다.

대신 JToggleButtons를 GridLayout에 배치합니다. 그들은 탭과 똑같이 보이지 않을 것입니다. 그러나 그것들은 사용할 수있을 것입니다. 그리고 나는 사용자들이 어느쪽으로 든 신경을 쓰지 않을 것이라고 생각합니다.

탭 아래의 작은 "정보"영역과 기본 컨텐트 영역은 각각 CardLayout이어야합니다. 이렇게하면 각각의 콘텐츠가 가능한 모든 콘텐츠를 수용 할 수있을 정도로 커집니다.

String title1 = "Tab 1"; 
String title2 = "Tab 2"; 

Component infoPanel1 = new FileInfoPanel(); 
Component infoPanel2 = new OtherInfoPanel(); 

Component content1 = new WaveFormPanel(); 
Component content2 = new OtherPanel(); 

final CardLayout infoLayout = new CardLayout(); 
final JComponent infoArea = new JPanel(infoLayout); 
infoArea.add(infoPanel1, "1"); 
infoArea.add(infoPanel2, "2"); 

final CardLayout contentAreaLayout = new CardLayout(); 
final JComponent contentArea = new JPanel(contentAreaLayout); 
contentArea.add(content1, "1"); 
contentArea.add(content2, "2"); 

class TabSwitcher 
implements ActionListener { 
    private String cardID; 

    TabSwitcher(String cardID) { 
     this.cardID = cardID; 
    } 

    @Override 
    public void actionPerformed(ActionEvent event) { 
     infoLayout.show(infoArea, cardID); 
     contentAreaLayout.show(contentArea, cardID); 
    } 
} 

JToggleButton tab1 = new JToggleButton("Tab 1"); 
tab1.setHorizontalAlignment(SwingConstants.LEADING); 
tab1.addActionListener(new TabSwitcher("1")); 

JToggleButton tab2 = new JToggleButton("Tab 2"); 
tab2.setHorizontalAlignment(SwingConstants.LEADING); 
tab2.addActionListener(new TabSwitcher("2")); 

ButtonGroup group = new ButtonGroup(); 
group.add(tab1); 
group.add(tab2); 

JComponent tabsPanel = new JPanel(new GridLayout(0, 1)); 
tabsPanel.setBorder(BorderFactory.createEmptyBorder(6, 0, 12, 0)); 
tabsPanel.add(tab1); 
tabsPanel.add(tab2); 

JComponent tabArea = new JPanel(new BorderLayout()); 
tabArea.add(tabsPanel, BorderLayout.PAGE_START); 
tabArea.add(infoArea, BorderLayout.CENTER); 

JComponent analyser = new JPanel(new BorderLayout()); 
analyser.add(tabArea, BorderLayout.LINE_START); 
analyser.add(contentArea, BorderLayout.CENTER); 

tab1.doClick(); 

frame.getContentPane().add(analyser); 
frame.pack(); 
+0

좋아, 알았다. 당신의 노력에 감사드립니다! jtogglebutton을 사용하면 좋은 생각입니다. –