2017-02-02 72 views
1

私はタブパインを持っていますが、何が起こっているのかに応じて、特定のタブを非表示にしたい場合や、シーンとタブはすべてFXMLで定義されています。Javafxタブペインのタブを非表示/非表示にするには

は、私が使用することができます知っている:tab1に含む

tabPane.getTabs().add(0, tab1); 

tabPane.getTabs().remove(tab1); 

が、私のすべてのタブは、FXMLで定義されています。私が取得して定義されたタブをすべて保存して保存することができたら、後でそれらを再追加してOKにすることができます。

+0

あなたは、タブの内容を隠す意味ですか?あなたのFXMLにはコントローラがありますか? –

+0

こんにちは。私の質問を見てくれてありがとう。はい、私のアプリはコントローラを持っています。私はタブ全体(タブパイン上のタブとすべての内容)を非表示にしたいと思います。 –

答えて

0

上記の解決策は問題ありません。あなたのFXMLであなたが操作したい各タブにIDを与えることを確かめてください。

<Tab fx:id="myTab1">....</Tab> 

この例では、タブコントロールの終了ポリシーを使用して、シーンからタブを削除しました。しかし、これはあなたに十分な情報を提供する必要があります。ここでは正しい方向にあなたを指している可能性があります作業溶液は次のとおりです。

<?xml version="1.0" encoding="UTF-8"?> 

<?import javafx.scene.control.Button?> 
<?import javafx.scene.control.ButtonBar?> 
<?import javafx.scene.control.Tab?> 
<?import javafx.scene.control.TabPane?> 
<?import javafx.scene.layout.AnchorPane?> 

<AnchorPane prefHeight="250.0" prefWidth="400.0" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.TestController"> 
    <children> 
     <TabPane fx:id="tabPane" layoutX="14.0" layoutY="14.0" prefHeight="294.0" prefWidth="446.0" AnchorPane.bottomAnchor="30.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> 
     <tabs> 
      <Tab fx:id="tab1" text="Tab 1"> 
      <content> 
       <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" /> 
      </content> 
      </Tab> 
      <Tab fx:id="tab2" text="Tab 2"> 
      <content> 
       <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" /> 
      </content> 
      </Tab> 
      <Tab fx:id="tab3" text="Tab 3"> 
       <content> 
        <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" /> 
       </content> 
      </Tab> 
      <Tab fx:id="tab4" text="Tab 4"> 
       <content> 
        <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" /> 
       </content> 
      </Tab> 
     </tabs> 
     </TabPane> 
     <ButtonBar layoutX="138.0" layoutY="216.0" prefHeight="40.0" prefWidth="200.0" AnchorPane.bottomAnchor="0.0" AnchorPane.rightAnchor="0.0"> 
     <buttons> 
      <Button mnemonicParsing="false" onAction="#saveTabs" text="Save" /> 
      <Button mnemonicParsing="false" onAction="#openTabs" text="Open" /> 
     </buttons> 
     </ButtonBar> 
    </children> 
</AnchorPane> 

メインクラス:

package application; 

import javafx.application.Application; 
import javafx.fxml.FXMLLoader; 
import javafx.scene.Parent; 
import javafx.scene.Scene; 
import javafx.stage.Stage; 


public class Main extends Application { 
    @Override 
    public void start(Stage primaryStage) { 
     try { 
      FXMLLoader loader = new FXMLLoader(); 
      Parent node = loader.load(Main.class.getClassLoader().getResource("fxml/TestFXML.fxml").openStream()); 
      Scene scene = new Scene(node,400,400); 
      scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm()); 
      primaryStage.setScene(scene); 
      primaryStage.show(); 
     } catch(Exception e) { 
      e.printStackTrace(); 
     } 
    } 

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

コントローラー:

package application; 

import java.util.ArrayList; 
import java.util.Collection; 
import java.util.stream.Collectors; 

import javafx.fxml.FXML; 
import javafx.scene.control.Tab; 
import javafx.scene.control.TabPane; 

public class TestController { 

    @FXML 
    private TabPane tabPane; 

    @FXML 
    private Tab tab1, tab2, tab3, tab4; 

    Collection<Tab> tabs = new ArrayList<>(); 
    Collection<String> openTabIds = new ArrayList<>(); 

    @FXML 
    private void initialize() { 
     tabs.add(tab1); 
     tabs.add(tab2); 
     tabs.add(tab3); 
     tabs.add(tab4); 
    } 

    @FXML 
    void openTabs() { 
     openTabIds.stream().forEach(string -> { 
      tabs.stream() 
       .filter(tab -> tab.getId().equals(string)).findFirst() 
       .ifPresent(tab -> tabPane.getTabs().add(tab)); 
     }); 
    } 

    @FXML 
    void saveTabs() { 
     openTabIds = tabPane.getTabs().stream().map(tab -> tab.getId()).collect(Collectors.toList()); 
    } 

} 
+0

はい。それはそれほど簡単でした。美しい例/コード。ありがとうございました。 –

関連する問題