2016-10-07 9 views
3

Move the close button too right sideあなたが見ることができるようにタブ

で右側の[閉じる]ボタンを表示する方法現在、閉じるボタンは一番上にあります。

どうすれば右側に配置できますか?

public class TabbedPaneTest extends Application 
{ 
    @Override 
    public void start(Stage primaryStage) 
    { 
    primaryStage.setTitle("TabPane Test"); 

    TabPane tabPane = new TabPane(); 
    tabPane.setStyle("-fx-tab-min-height: 100"); 
    tabPane.setRotateGraphic(true); 
    tabPane.setTabClosingPolicy(TabClosingPolicy.ALL_TABS); 

    tabPane.getTabs().addAll(tab("Tab 1"), tab("Tab 2")); 
    tabPane.setSide(Side.LEFT); 

    primaryStage.setScene(new Scene(tabPane, 400, 200)); 
    primaryStage.show(); 
    } 

    static Tab tab(String labelText) 
    { 
    Tab tab = new Tab(); 
    Label label = new Label(labelText); 
    label.setRotate(90); 
    tab.setGraphic(new StackPane(label)); 
    tab.setContent(new Label("  " + labelText + " content")); 
    return tab; 
    } 

    public static void main(String[] args) 
    { 
    launch(args); 
    } 
} 

答えて

2

これはちょっとハッキリです。 TabPaneCSS referenceTabPaneSkinのソースコードに基づいて

TabLabelが含まStackPane、近いButtonとフォーカスインジケータを含んでいます。このStackPaneのスタイルクラスはtab-containerです。

ですから、CSSでこのStackPaneを回転させることができます。

.tab-pane > .tab-header-area > .headers-region > .tab > .tab-container { 
    -fx-rotate:90; 
} 

StackPaneを回転させた後、私は1つも回転しなければならないように(それはスタイルクラスfocus-indicatorを持って、フォーカスインジケータが異なる方法で処理されていること、気づきました)。あなたと同じは、単にスタイルシートが追加され、TabLabelはもはや回転していないことを

.tab-pane > .tab-header-area > .headers-region > .tab * .focus-indicator { 
    -fx-rotate:-90; 
} 

、:

public class TabbedPaneTest extends Application { 
    @Override 
    public void start(Stage primaryStage) { 
     primaryStage.setTitle("TabPane Test"); 

     TabPane tabPane = new TabPane(); 
     tabPane.setStyle("-fx-tab-min-height: 100"); 
     tabPane.setRotateGraphic(true); 
     tabPane.setTabClosingPolicy(TabClosingPolicy.ALL_TABS); 

     tabPane.getTabs().addAll(tab("Tab 1"), tab("Tab 2")); 
     tabPane.setSide(Side.LEFT); 

     Scene scene = new Scene(tabPane, 400, 200); 
     scene.getStylesheets().add(getClass().getResource("application.css").toString()); 

     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    static Tab tab(String labelText) { 
     Tab tab = new Tab(); 
     Label label = new Label(labelText); 

     tab.setGraphic(new StackPane(label)); 
     tab.setContent(new Label("  " + labelText + " content")); 
     return tab; 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 

しかし、あなたはまた、これを使用することができますTab上のグラフィックを使用しないアプローチ:

static Tab tab(String labelText) { 
    Tab tab = new Tab(labelText); 
    tab.setContent(new Label("  " + labelText + " content")); 
    return tab; 
} 

これは絵にTabPaneなどを生成します:

enter image description here

+0

私は、外部スタイルシートなしでコードに直接CSSを追加するにはどうすればよいですか? 'Scene'は' setStyle() 'メソッドを持っていません。 –

+0

@VenkataRajuあなたは(少なくともいくつかの本当に醜いハッキングなしでは)できません。外部スタイルシートを使用します。それはとにかくより良い練習です。 –

+0

@ James_Dええ、期待通り:)しかし、それは速いテストのために便利だったでしょう。 –

関連する問題