2011-02-06 4 views
1

JPanel에서 JTabbedPane (상단에 수평 탭이 있음)을 가지고 있는데이 JTabbedPane의 탭을 전체 너비에 맞추기를 원합니다 JPanel의 경우, 탭이 하나만 있으면 탭이 전체 너비를 채 웁니다. 두 개의 탭이있을 때, 각 탭은 그 절반을 충분히 채울 것입니다.가장 쉬운 방법은 Swing-JTabbedPane-Tabs가 컨테이너의 전체 너비를 채우는 것입니다.

사용자 정의 JComponent를 탭의 제목으로 사용하고 PreferredSize를 설정하면 솔루션이되지 않습니다. JTabbedPanel이 title-components 주위에 일종의 경계를 설정 한 것 같기 때문입니다.

JTabbedPane의 일부 또는 전부를 확장 및/또는 다시 작성하는 것보다 쉬운 솔루션이 있습니까?

+0

얼마나 멀리 갈 의향이 있느냐에 따라 다릅니다. 때로는 겉으로보기에 매우 단순하기 때문에 실제로는 전체 구성 요소를 직접 다시 작성하는 것이 더 쉽습니다 (필자는 쉽지 않다고 말했고, Swing을 수정하려고 시도하는 것보다 쉬웠다 고 말한 것). 예를 들어, OS 네이티브 테이블 표시를 원한다고 상상해보십시오. 여기서 스크롤바는 JTable 헤더를 포함한 ** JTable의 모든 높이를 사용합니다 **. 이것은 스윙 - 애플 리케이션 죽은 공짜입니다. 그것은보기 흉한. 기본적으로 더 멋진 JTable을 다시 작성하는 것 외에는 할 일이별로 없습니다. 말한 당신의 구체적인 경우에 대해서는 아무것도 모릅니다. – SyntaxT3rr0r

+0

예, 재 작성은 기본적으로 (CardLayout을 사용하여) 문제를 해결하기 위해 수행 한 작업이었습니다. 하지만 이제는 실제로 매우 전문적으로 보이지 않으므로 JTabbedPane을 통해 간단한 방법이 있는지 궁금합니다. – kohlehydrat

+0

JPanel의 layoutManager는 무엇입니까? [BorderLayout이 작업에 적합합니다. ] –

답변

-1

시험이 코드를 (어쩌면 내가 탭에 대해 이야기하고있을 때, 나는이 탐색 구성 요소를 참조하는 것이 당신이 구성 요소 자체를 구성 요소가 표시 전환에 대한 클릭 수에 추가해야합니다.) :

public class Tabs extends javax.swing.JFrame { 


    public Tabs() { 
     initComponents(); 
    } 


     private void initComponents() { 

     jPanel1 = new javax.swing.JPanel(); 
     jTabbedPane1 = new javax.swing.JTabbedPane(); 
     jPanel2 = new javax.swing.JPanel(); 
     jPanel3 = new javax.swing.JPanel(); 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

     jPanel1.setLayout(new java.awt.BorderLayout()); 

     jPanel2.setLayout(new java.awt.BorderLayout()); 


     jTabbedPane1.addTab("tab1", jPanel2); 


     jPanel3.setLayout(new java.awt.BorderLayout()); 


     jTabbedPane1.addTab("tab2", jPanel3); 

     jPanel1.add(jTabbedPane1, java.awt.BorderLayout.CENTER); 

     add(jPanel1); 

     pack(); 
    } 


    public static void main(String args[]) { 
     java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       new Tabs().setVisible(true); 
      } 
     }); 
    } 


    private javax.swing.JPanel jPanel1; 
    private javax.swing.JPanel jPanel2; 
    private javax.swing.JPanel jPanel3; 
    private javax.swing.JTabbedPane jTabbedPane1; 
} 
+0

감사합니다. titlecomponents 내부에서 BorderLayout을 사용하지는 않겠지 만 작동합니다. – kohlehydrat

+2

2 개의 답변을 게시하는 대신 이전 답변을 수정하지 않는 이유는 무엇입니까? –

+0

sorry.i 다음 답변을 위해이 조언을 기억하십시오. –

관련 문제