0

タブが呼び出されるたびにメソッドを開始するにはどうすればよいですか? aMain.fxmltabpanetwoがあり、各タブ ( 、 )tabsに個別の fxml を含めました。tab1.fxmltab2.fxml

Main.fxml

<?xml version="1.0" encoding="UTF-8"?>    
<?import javafx.scene.control.*?>    
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>

<AnchorPane prefHeight="434.0" prefWidth="428.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="controller.MainController">
   <children>
  <TabPane prefHeight="434.0" prefWidth="428.0" tabClosingPolicy="UNAVAILABLE" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
    <tabs>
      <Tab fx:id="tab1" text="Tab 1">
           <content>
              <fx:include source="tab1.fxml" />
           </content>
      </Tab>
      <Tab fx:id="tab2" onSelectionChanged="#addView" text="Tab 2">
           <content>
              <fx:include source="tab2.fxml" />
           </content>
      </Tab>
    </tabs>
  </TabPane>
 </children>
</AnchorPane>      

MainController.java

public class MainController implements Initializable{

    @FXML private Tab tab1;
    @FXML private Tab tab2;

    @Override
    public void initialize(URL arg0, ResourceBundle arg1) {

    }


    @FXML public void addView(){

    }
}

各 FXML にはLabel、タブ (コンテンツ) が呼び出された頻度を示す があります。したがって、タブ (「tab2」) をクリックすると、カウンター ラベルに「1」が表示され、このタブを再度呼び出すたびに +1 ずつ増加します。これは、タブ コントローラー内のメソッドを使用することで発生します。

tab1.fxml

<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>

<AnchorPane prefHeight="249.0" prefWidth="257.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="controller.tab1Controller">
   <children>
     <Label fx:id="lbl_1" layoutX="92.0" layoutY="53.0" text="not clicked" />
   </children>
</AnchorPane>

tab1Controller.java

public class tab1Controller implements Initializable{


     @FXML public  Label lbl_1;

     private static int counter=0;

    @Override
    public void initialize(URL arg0, ResourceBundle arg1) {


    }

    public void addViewCounter(){
        lbl_1.setText(""+counter);
        counter++;
    }
}

Tab2.fxml

<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>

<AnchorPane prefHeight="249.0" prefWidth="257.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="controller.tab2Controller">
   <children>
     <Label fx:id="lbl_2" layoutX="92.0" layoutY="53.0" text="not clicked" />
   </children>
</AnchorPane>

tab2Controller.java

public class tab1Controller implements Initializable{


     @FXML public  Label lbl_2;

     private static int counter=0;

    @Override
    public void initialize(URL arg0, ResourceBundle arg1) {


    }

    public void addViewCounter(){
        lbl_2.setText(""+counter);
        counter++;
    }
}

私はすでに静的メソッドとラベルを使用してこの問題を解決しようとしましたがNullPointerExceptions、これはJava 8ではもう機能しないようです。また、...を使用してコントローラーを取得しようとしましたFXMLloader...この方法で私もを取得しNullPointerExceptionsます。

onCall含まれている fmxl またはアンカーペインのメソッドはありませんか? または、コントローラーを再度初期化する何かかもしれません。

他の解決策やアイデアはありますか?

4

1 に答える 1