2017-11-30 16 views
0

こんにちは友人私はSwingとawtを使用してデスクトップアプリケーションを作成しています。私はTab(アクティビティ、パーク、フィルタトレイル、MyPark)を作成するためにJTabbedPaneを使用していますが、それは左に揃えています。私はいくつかのカスタムUL(ルックアンドフィール)を使用していましたが、ここでは何の解決策も考えられませんでした。私のコードです。画面中央のJTabbedPaneでタブを作成する方法

private void initTabbedPane() { 
     UIManager.put("TabbedPane.selected", Color.BLUE); 
     tabbedPane = new JTabbedPane(){ 
      public Color getForegroundAt(int index){ 
       if(getSelectedIndex() == index) return Color.white; 
       return Color.BLACK; 
       } 
      }; 
     tabbedPane.setUI(new CustomTabUI()); 
     tabbedPane.setBackground(Color.WHITE); 
     tabbedPane.setTabPlacement(JTabbedPane.TOP); 
     tabbedPane.addTab(getOutdoors.getActivities().getName(), 
       new ActivityTab(getOutdoors.getActivities())); 
     tabbedPane.addTab(getOutdoors.getParks().getName(), new ParkTab(getOutdoors.getParks())); 
     tabbedPane.addTab("Filter Trails", new FilterTab(getOutdoors.getActivities(), 
       getOutdoors.getTrailLists(), getOutdoors.getNumTrailLists())); 


     for (int i = 0; i < getOutdoors.getNumTrailLists(); i++) { 
      TrailList t = getOutdoors.getTrailList(i); 
      if(t != null) 
       tabbedPane.addTab(t.getParkName(), new TrailListTab(t, getOutdoors.getActivities())); 
     } 


     tabbedPane.setSelectedIndex(0); 
     if (openFile) { 
      getContentPane().removeAll(); 
      openFile = false; 
     } 
     tabbedPane.setTabPlacement(JTabbedPane.TOP); 
     tabbedPane.setTabLayoutPolicy(JTabbedPane.WRAP_TAB_LAYOUT); 

     getContentPane().add(tabbedPane, BorderLayout.CENTER); 
     getContentPane().validate(); 
    } 

カスタムUIクラス: -

public class CustomTabUI extends BasicTabbedPaneUI { 

    private final Insets borderInsets = new Insets(0, 0, 10, 0); 
    @Override 
    protected void paintContentBorder(Graphics g, int tabPlacement, int selectedIndex) { 

    } 
    @Override 
    protected Insets getContentBorderInsets(int tabPlacement) { 
     return borderInsets; 
    } 

} 

enter image description here

+0

各LAFには、タブ付きペインのレイアウトがあります。 Windowsでは左揃えが正常です。 MACで私はセンターが正常だと信じています。コンポーネントの動作を強制しないでください。別の解決方法は、FlowLayoutでJPanelを使用し、各タブにボタンを追加することです。次に、それぞれのパネルにCardLayoutを使用することができます。ボタンをクリックすると、適切なパネルが表示されます。詳細および使用例については、[CardLayoutの使用方法](https://docs.oracle.com/javase/tutorial/uiswing/layout/card.html)のSwingチュートリアルのセクションを参照してください。 – camickr

答えて

0

[OK]を私は、私が提案するつもりmはチートのいくつかの種類であることを知っています。 my result

の下に削除する必要があるとして

public class NewJFrame extends javax.swing.JFrame { 

/** 
* Creates new form NewJFrame 
*/ 
public NewJFrame() { 
    initComponents(); 
    jTabbedPane1.addTab("               ", null); 
    jTabbedPane1.setBackgroundAt(0, new Color(0,102,102)); 



    jTabbedPane1.setEnabledAt(0, false); 
    JPanel jPanel; 
    jPanel = new JPanel(); 
    jPanel.setBackground(Color.yellow); 
    jTabbedPane1.addTab("My tab 1", jPanel); 
    jTabbedPane1.setSelectedIndex(1); 
    jPanel = new JPanel(); 
    jPanel.setBackground(Color.PINK); 
    jTabbedPane1.addTab("My tab 1", jPanel); 
    jTabbedPane1.addTab("               ", null); 
    jTabbedPane1.setEnabledAt(3, false); 
    jTabbedPane1.setBackgroundAt(3, new Color(0,102,102)); 


} 
@SuppressWarnings("unchecked") 
// <editor-fold defaultstate="collapsed" desc="Generated Code">       
private void initComponents() { 

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

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

    jPanel1.setBackground(new java.awt.Color(0, 102, 102)); 

    javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); 
    jPanel1.setLayout(jPanel1Layout); 
    jPanel1Layout.setHorizontalGroup(
     jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(jPanel1Layout.createSequentialGroup() 
      .addContainerGap() 
      .addComponent(jTabbedPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 920, Short.MAX_VALUE) 
      .addContainerGap()) 
    ); 
    jPanel1Layout.setVerticalGroup(
     jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(jPanel1Layout.createSequentialGroup() 
      .addContainerGap() 
      .addComponent(jTabbedPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 478, Short.MAX_VALUE) 
      .addContainerGap()) 
    ); 

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
    getContentPane().setLayout(layout); 
    layout.setHorizontalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
    ); 
    layout.setVerticalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
    ); 

    pack(); 
}// </editor-fold>       

boolean state = false ; 
public static void main(String args[]) { 

    java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      new NewJFrame().setVisible(true); 
     } 
    }); 
} 

// Variables declaration - do not modify      
private javax.swing.JPanel jPanel1; 
private javax.swing.JTabbedPane jTabbedPane1; 
// End of variables declaration     

の下

}

結果があるように私のコードは、適切な解決策ではないですが、あなたはそれを

を使用することができミリアンペアニンバスのルック・アンド・フィールでこれを改善し、無効なタブの境界線を緑色にしてユーザーの目を探すことはありません。

これはチート

関連する問題