I'm trying to use a searchbox in another stage by using fxml for the layout. It it showing absolutely correct,but it doesn't react to any events.It seems that the elements are not found.
What is wrong with my code?
import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.stage.*;
import javafx.scene.*;
import javafx.scene.control.Button;
import javafx.scene.control.CheckBox;
import javafx.scene.control.Label;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
public class SearchBox{
//tabs
@FXML
private static TabPane frepl_tabPane=new TabPane();
@FXML
private static Tab frepl_tabReplace=new Tab();
@FXML
private static Tab frepl_tabSearch=new Tab();
//search
//search Controls
@FXML
private static TextField fr_searchInput=new Textfield();
@FXML
private static Button fr_find=new Button();
private static Stage stage = new Stage();
public static void display(String title) throws IOException {
Parent root = FXMLLoader.load(SearchBox.class.getResource("find_replace.fxml"));
Scene scene = new Scene(root);
stage.setTitle(title);
stage.setScene(scene);
stage.showAndWait();
frepl_tabPane.getSelectionModel().selectedItemProperty().addListener((obs,ov,nv)->{
//no reaction here
stage.setTitle(nv.getText());
System.out.println("pane was tabbed");
});
fr_find.setOnMouseClicked(e ->{
//no reaction here
System.out.println("search");
});
}
To open it i use (inside of the "initialize" function of another FXMLDocumentControler):
btn_search.setOnMouseClicked(e->{
try {
SearchBox.display("search");
} catch (IOException ex) {
Logger.getLogger(FXMLDocumentController.class.getName()).log(Level.SEVERE, null, ex);
}
});
Here is the stack trace(when everything is non static e.g. the class,methods and fields). it appears,when i close the window.
Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
at SearchBox.display(SearchBox.java:133)
at FXMLDocumentController.lambda$A_table_buttons$22(FXMLDocumentController.java:1309)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Scene$ClickGenerator.postProcess(Scene.java:3470)
at javafx.scene.Scene$ClickGenerator.access$8100(Scene.java:3398)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3766)
at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485)
at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762)
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:352)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:275)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$354(GlassViewEventHandler.java:388)
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:387)
at com.sun.glass.ui.View.handleMouseEvent(View.java:555)
at com.sun.glass.ui.View.notifyMouse(View.java:937)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
at java.lang.Thread.run(Thread.java:745)
FXML file:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.text.*?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="508.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
<children>
<TabPane fx:id="frepl_tabPane" layoutX="-1.0" layoutY="2.0" prefHeight="400.0" prefWidth="508.0" tabClosingPolicy="UNAVAILABLE">
<tabs>
<Tab fx:id="frepl_tabSearch" text="Search">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0">
<children>
<TableView fx:id="fr_Stableview" layoutY="87.0" prefHeight="287.0" prefWidth="508.0">
<columns>
<TableColumn fx:id="fr_Sline" editable="false" prefWidth="75.0" sortable="false" text="Line" />
<TableColumn fx:id="fr_SColumn" editable="false" prefWidth="61.0" sortable="false" text="Column" />
<TableColumn fx:id="fr_SValue" editable="false" prefWidth="371.0" sortable="false" text="Value" />
</columns>
</TableView>
<TextField fx:id="fr_searchInput" layoutX="66.0" layoutY="13.0" prefHeight="25.0" prefWidth="250.0" />
<Label layoutX="3.0" layoutY="17.0" text="Search for:" />
<Button fx:id="fr_find" layoutX="324.0" layoutY="13.0" mnemonicParsing="false" text="Find" />
<Button fx:id="fr_findAll" layoutX="372.0" layoutY="13.0" mnemonicParsing="false" text="Find All" />
<CheckBox fx:id="fr_matchCaseS" layoutX="324.0" layoutY="53.0" mnemonicParsing="false" text="Match case (Aa)" />
<Label fx:id="fr_foundS" layoutX="8.0" layoutY="70.0" text="found: 5" underline="true">
<font>
<Font name="System Bold Italic" size="12.0" />
</font>
</Label>
</children>
</AnchorPane>
</content>
</Tab>
<Tab fx:id="frepl_tabReplace" text="Replace">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0">
<children>
<TableView fx:id="fr_tableviewR" layoutY="107.0" prefHeight="267.0" prefWidth="508.0">
<columns>
<TableColumn fx:id="fr_lineR" prefWidth="75.0" text="Line" />
<TableColumn fx:id="fr_ColumnR" prefWidth="61.0" text="Column" />
<TableColumn fx:id="fr_ValueR" prefWidth="371.0" text="Value" />
</columns>
</TableView>
<CheckBox fx:id="fr_matchCaseR" layoutX="347.0" layoutY="59.0" mnemonicParsing="false" text="Match case (Aa)" />
<Label layoutX="3.0" layoutY="17.0" text="Search for:" />
<Button fx:id="fr_replace" layoutX="347.0" layoutY="11.0" mnemonicParsing="false" text="Replace" />
<TextField fx:id="fr_replaceInput" layoutX="82.0" layoutY="13.0" prefHeight="25.0" prefWidth="250.0" />
<Button fx:id="fr_replaceAll" layoutX="412.0" layoutY="11.0" mnemonicParsing="false" text="Replace All" />
<TextField fx:id="fr_replaceAllInput" layoutX="82.0" layoutY="55.0" prefHeight="25.0" prefWidth="250.0" />
<Label layoutX="3.0" layoutY="59.0" text="Replace with:" />
<Label fx:id="fr_replacedR" layoutX="3.0" layoutY="90.0" text="replaced: 5" underline="true">
<font>
<Font name="System Bold Italic" size="12.0" />
</font>
</Label>
</children>
</AnchorPane>
</content>
</Tab>
</tabs>
</TabPane>
</children>
</Pane>