2011-02-06 79 views
1

我在JPanel中有一個JTabbedPane(頂部有水平製表符),並且我希望此JTabbedPane的製表符適合整個寬度JPanel,所以如果只有一個選項卡,選項卡將填充整個寬度;當有兩個選項卡時,每個選項卡會填滿一半,依此類推。最簡單的方法使Swing-JTabbedPane-Tabs填充其容器的整個寬度

使用自定義JComponent作爲標籤的標題並設置PreferredSize並不是一個解決方案,因爲JTabbedPanel似乎在標題組件上放置了某種邊界。

是否有比擴展和/或重寫部分/全部JTabbedPane更簡單的解決方案?

(也許我應該補充一點,當我在談論的標籤,我指的是這些導航組件,您可以點擊顯示的組件進行切換,而不是組件本身。)

+0

這取決於你願意走多遠。有時對於看起來非常簡單的事情來說,自己重寫整個組件實際上會更容易(我沒有寫這很容易,我只是說它比試圖修復Swing更容易)。例如,假設您想要OS本機表格顯示,其中滾動條需要JTable的所有高度,**包括JTable標題** ......嗯,祝您好運。這是一個Swing應用程序的死亡贈品。它看起來很難受。除了基本上重寫更好的JTable之外,還沒有太多要做。不知道你說的具體情況。 – SyntaxT3rr0r 2011-02-06 13:03:27

+0

是的,重寫基本上是我所做的解決問題(使用CardLayout)。但它現在看起來並不是很專業,所以我想知道是否有一些直接通過JTabbedPane的方法。 – kohlehydrat 2011-02-06 13:09:57

回答

-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; 
} 
相關問題