I have a main scene (BorderPane) in which there are buttons(SetLeft) and I want when I press those Buttons for the Center to change in a different scene. So far, I made a scene for when I press one of the buttons the Center changes (it is located in a subfolder called "forms"):
package meditest.forms;
public class Users_FXMLController implements Initializable {
@FXML
private Button deleteBtn;
@FXML
private TextField idtxt;
@FXML
private TextField usernametxt;
@FXML
private TextField passwordtxt;
@FXML
private TextField firstnametxt;
@FXML
private TextField lastnametxt;
@FXML
private ChoiceBox<String> roles;
@FXML
private TextField addresstxt;
@FXML
private TextField towntxt;
@FXML
private TextField phonetxt;
@FXML
private TextField afmtxt;
@FXML
private TextField amkatxt;
@FXML
private TextField emailtxt;
@FXML
private TableView<UsersTableContent> dbUserTable;
@FXML
private TableColumn<UsersTableContent, String> dbUserTableId;
@FXML
private TableColumn<UsersTableContent, String> dbUserTableUsername;
@FXML
private TableColumn<UsersTableContent, String> dbUserTablePassword;
@FXML
private TableColumn<UsersTableContent, String> dbUserTableFirstname;
@FXML
private TableColumn<UsersTableContent, String> dbUserTableLastname;
@FXML
private TableColumn<UsersTableContent, String> dbUserTableRole;
@FXML
private TableColumn<UsersTableContent, String> dbUserTableAddress;
@FXML
private TableColumn<UsersTableContent, String> dbUserTableTown;
@FXML
private TableColumn<UsersTableContent, String> dbUserTablePhone;
@FXML
private TableColumn<UsersTableContent, String> dbUserTableAfm;
@FXML
private TableColumn<UsersTableContent, String> dbUserTableAmka;
@FXML
private TableColumn<UsersTableContent, String> dbUserTableEmail;
@FXML
private TextField search_user;
@FXML
private Button refresh;
ObservableList<UsersTableContent> search = FXCollections.observableArrayList();
public static ObservableList<UsersTableContent>oblist = FXCollections.observableArrayList();
@FXML
public void DeleteBtnStatus(){
String id = idtxt.getText();
boolean isDisabled = (id.isEmpty() || id.trim().isEmpty());
deleteBtn.setDisable(isDisabled);
}
@FXML
private void refresh_button_handler(ActionEvent event) {
refresh();
}
@Override
public void initialize(URL url, ResourceBundle rb) {
// TODO
roles.getItems().add("Admin");
roles.getItems().add("Apothikarios");
roles.getItems().add("Dianomeas");
roles.getItems().add("Logistis");
roles.getItems().add("Ypalilos");
dbUserTableId.setCellValueFactory(new PropertyValueFactory<>("id"));
dbUserTableUsername.setCellValueFactory(new PropertyValueFactory<>("username"));
dbUserTablePassword.setCellValueFactory(new PropertyValueFactory<>("password"));
dbUserTableFirstname.setCellValueFactory(new PropertyValueFactory<>("firstname"));
dbUserTableLastname.setCellValueFactory(new PropertyValueFactory<>("lastname"));
dbUserTableRole.setCellValueFactory(new PropertyValueFactory<>("role"));
dbUserTableAddress.setCellValueFactory(new PropertyValueFactory<>("address"));
dbUserTableTown.setCellValueFactory(new PropertyValueFactory<>("town"));
dbUserTablePhone.setCellValueFactory(new PropertyValueFactory<>("phone"));
dbUserTableAfm.setCellValueFactory(new PropertyValueFactory<>("afm"));
dbUserTableAmka.setCellValueFactory(new PropertyValueFactory<>("amka"));
dbUserTableEmail.setCellValueFactory(new PropertyValueFactory<>("email"));
refresh();
}
public void refresh() {
db database = new db();
String sql = "SELECT * FROM users ;";
ResultSet rs = database.SelectQuery(sql);
oblist.clear();
try {
while (rs.next()) {
//System.out.println(rs.getInt("id") + rs.getString("username") + rs.getString("password"));
oblist.add(new UsersTableContent(rs.getInt("id"),
rs.getString("username"),rs.getString("password"),rs.getString("firstname"),
rs.getString("lastname"),rs.getString("role"),
rs.getString("address"),rs.getString("town"),rs.getString("phone"),
rs.getString("afm"),rs.getString("amka"),rs.getString("email")));
}
} catch (SQLException ex) {
Logger.getLogger(Users_FXMLController.class.getName()).log(Level.SEVERE, null, ex);
}
dbUserTable.setItems(oblist);
database.close();
search_user.textProperty().addListener((observable, oldValue, newValue) -> {
search.clear();
if(newValue.equals("")){
dbUserTable.setItems(oblist);
} else{
String txt = newValue.toLowerCase();
for(UsersTableContent user:oblist){
if(String.valueOf(user.getId()).equals(txt)){
search.add(user);
break;
} else if(user.getFirstname().contains(txt)||user.getPassword().contains(txt)
||user.getTown().contains(txt)||user.getRole().contains(txt)
||user.getPhone().contains(txt)||user.getUsername().contains(txt)
||user.getLastname().contains(txt)||user.getEmail().contains(txt)
||user.getAddress().contains(txt)||user.getAmka().contains(txt)
||user.getAfm().contains(txt)){
search.add(user);
}
}
dbUserTable.setItems(search);
}
});
}
}
I also use a different class here for values in a TableView I have in the previous class (it is located in the main folder):
package meditest;
public class UsersTableContent {
String username,password,firstname,lastname,role,address,town,phone,afm,amka,email;
int id;
public UsersTableContent(int id, String username, String password, String firstname, String lastname, String role, String address, String town, String phone, String afm, String amka, String email) {
this.id = id;
this.username = username;
this.password = password;
this.firstname = firstname;
this.lastname = lastname;
this.role = role;
this.address = address;
this.town = town;
this.phone = phone;
this.afm = afm;
this.amka = amka;
this.email = email;
}
}
But I get the above error and it shows that it appears in the main Controller:
package meditest;
public class FXMLmainController implements Initializable {
@FXML
private Label Name_label;
@FXML
private Label role_label;
@FXML
private Label do_label;
@FXML
private Button users_button;
@FXML
private Button sales_button;
@FXML
private Button medicine_button;
@FXML
private Button kalathi_button;
@FXML
private Button dianomis_button;
@FXML
private Button statistics_button;
@FXML
private Button settings_button;
@FXML
private Button promitheutes_button;
@FXML
private BorderPane main;
/**
* Initializes the controller class.
*/
@Override
public void initialize(URL url, ResourceBundle rb) {
}
@FXML
private void menu_buttons_clicked(ActionEvent event) {
Button source = (Button) event.getSource();
change_scene(source.getId());//I get the error for this line
}
private void change_scene(String scene_name) {
Parent secondroot = null;
try {
String name = scene_name.substring(0,scene_name.length() -7 );
System.out.println(".\\forms\\"+name+"_FXML.fxml");
FXMLLoader loader = new FXMLLoader(getClass().getResource("forms/"+name+"_FXML.fxml"));
secondroot = loader.load();//and here
main.setCenter(secondroot);
} catch (IOException ex) {
Logger.getLogger(FXMLDocumentController.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
In case you want the FXML files: users_FXML (it is in the "forms" subfolder with the controller):
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ChoiceBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.layout.VBox?>
<AnchorPane id="AnchorPane" prefHeight="765.0" prefWidth="1052.0" xmlns="http://javafx.com/javafx/9.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="meditest.forms.Users_FXMLController">
<children>
<VBox prefHeight="589.0" prefWidth="1336.0">
<children>
<GridPane alignment="CENTER" hgap="20.0" prefHeight="100.0" prefWidth="962.0" vgap="20.0">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<Label text="ID Χρήστη:" />
<Label text="Username Χρήστη:" GridPane.rowIndex="2" />
<Label text="Κωδικός Χρήστη:" GridPane.columnIndex="1" />
<Label text="Όνομα Χρήστη:" GridPane.columnIndex="1" GridPane.rowIndex="2" />
<Label text="Επίθετο Χρήστη:" GridPane.columnIndex="2" />
<Label text="Ρόλος Χρήστη:" GridPane.columnIndex="2" GridPane.rowIndex="2" />
<Label text="Διεύθυνση Χρήστη:" GridPane.columnIndex="3" />
<Label text="Πόλη Κατοικίας:" GridPane.columnIndex="3" GridPane.rowIndex="2" />
<Label text="Τηλέφωνο Χρήστη:" GridPane.columnIndex="4" />
<Label text="ΑΦΜ Χρήστη:" GridPane.columnIndex="4" GridPane.rowIndex="2" />
<Label text="ΑΜΚΑ Χρήστη:" GridPane.columnIndex="5" />
<Label text="Email Χρήστη" GridPane.columnIndex="5" GridPane.rowIndex="2" />
<Button alignment="CENTER" disable="true" mnemonicParsing="false" prefHeight="36.0" prefWidth="78.0" text="Εισαγωγή" GridPane.columnIndex="6" GridPane.rowIndex="1">
<GridPane.margin>
<Insets left="20.0" />
</GridPane.margin>
</Button>
<Button disable="true" mnemonicParsing="false" text="Ενημέρωση" GridPane.columnIndex="6" GridPane.rowIndex="2">
<GridPane.margin>
<Insets left="20.0" />
</GridPane.margin>
</Button>
<Button fx:id="deleteBtn" disable="true" mnemonicParsing="false" prefHeight="25.0" prefWidth="79.0" text="Διαγραφή" GridPane.columnIndex="6" GridPane.rowIndex="3">
<GridPane.margin>
<Insets left="20.0" />
</GridPane.margin>
</Button>
<TextField fx:id="idtxt" onAction="#DeleteBtnStatus" onKeyReleased="#DeleteBtnStatus" GridPane.rowIndex="1" />
<TextField fx:id="usernametxt" GridPane.rowIndex="3" />
<TextField fx:id="passwordtxt" GridPane.columnIndex="1" GridPane.rowIndex="1" />
<TextField fx:id="firstnametxt" GridPane.columnIndex="1" GridPane.rowIndex="3" />
<TextField fx:id="lastnametxt" GridPane.columnIndex="2" GridPane.rowIndex="1" />
<TextField fx:id="addresstxt" GridPane.columnIndex="3" GridPane.rowIndex="1" />
<TextField fx:id="towntxt" GridPane.columnIndex="3" GridPane.rowIndex="3" />
<TextField fx:id="phonetxt" GridPane.columnIndex="4" GridPane.rowIndex="1" />
<TextField fx:id="afmtxt" GridPane.columnIndex="4" GridPane.rowIndex="3" />
<TextField fx:id="amkatxt" GridPane.columnIndex="5" GridPane.rowIndex="1" />
<TextField fx:id="emailtxt" GridPane.columnIndex="5" GridPane.rowIndex="3" />
<ChoiceBox fx:id="roles" prefWidth="150.0" GridPane.columnIndex="2" GridPane.rowIndex="3" />
</children>
<padding>
<Insets bottom="20.0" />
</padding>
</GridPane>
<TextField fx:id="search_user" promptText="Πληκτρολογίστε εδώ αν θέλετε να αναζητήσεται ένα αντικείμενο">
<VBox.margin>
<Insets top="10.0" />
</VBox.margin>
</TextField>
<Button fx:id="refresh" mnemonicParsing="false" onAction="#refresh_button_handler" text="Ανανέωση">
<VBox.margin>
<Insets top="20.0" />
</VBox.margin>
</Button>
<TableView fx:id="dbUserTable" prefHeight="450.0" prefWidth="993.0">
<columns>
<TableColumn fx:id="dbUserTableId" prefWidth="63.0" text="ID" />
<TableColumn fx:id="dbUserTableUsername" prefWidth="116.00003051757812" text="Username" />
<TableColumn fx:id="dbUserTablePassword" prefWidth="123.0" text="Password" />
<TableColumn fx:id="dbUserTableFirstname" prefWidth="104.0" text="Όνομα" />
<TableColumn fx:id="dbUserTableLastname" minWidth="1.0" prefWidth="113.0" text="Επίθετο" />
<TableColumn fx:id="dbUserTableRole" prefWidth="73.0" text="Ρόλος" />
<TableColumn fx:id="dbUserTableAddress" prefWidth="132.0" text="Διεύθυνση" />
<TableColumn fx:id="dbUserTableTown" prefWidth="79.0" text="Πόλη" />
<TableColumn fx:id="dbUserTablePhone" prefWidth="94.0" text="Τηλέφωνο" />
<TableColumn fx:id="dbUserTableAfm" prefWidth="115.0" text="ΑΦΜ" />
<TableColumn fx:id="dbUserTableAmka" prefWidth="123.0" text="ΑΜΚΑ" />
<TableColumn fx:id="dbUserTableEmail" prefWidth="159.0" text="Email" />
</columns>
<VBox.margin>
<Insets top="20.0" />
</VBox.margin>
</TableView>
</children>
<padding>
<Insets bottom="10.0" left="20.0" right="20.0" top="10.0" />
</padding>
</VBox>
</children>
</AnchorPane>
and FXML main (it is in the main folder with the controller):
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.paint.LinearGradient?>
<?import javafx.scene.paint.Stop?>
<?import javafx.scene.text.Font?>
<AnchorPane id="AnchorPane" prefHeight="690.0" prefWidth="1222.0" xmlns="http://javafx.com/javafx/9.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="meditest.FXMLmainController">
<children>
<BorderPane fx:id="main" prefHeight="782.0" prefWidth="1225.0">
<left>
<Pane prefHeight="783.0" prefWidth="239.0" style="-fx-background-color: #0099ff;" BorderPane.alignment="CENTER">
<children>
<Pane layoutX="-1.0" layoutY="679.0" prefHeight="55.0" prefWidth="240.0" style="-fx-background-color: #0099ff;">
<children>
<Label fx:id="Name_label" layoutX="78.0" layoutY="6.0" prefHeight="17.0" prefWidth="111.0" textAlignment="CENTER" textFill="#d01d1d" />
<Label fx:id="role_label" layoutX="102.0" layoutY="26.0" textFill="#cd1d1d" />
</children>
</Pane>
<Button fx:id="users_button" layoutX="-7.0" layoutY="63.0" mnemonicParsing="false" onAction="#menu_buttons_clicked" prefHeight="76.0" prefWidth="246.0" styleClass="button1" stylesheets="@css/menu.css" text="Χρήστες" />
<Button fx:id="sales_button" layoutX="-7.0" layoutY="139.0" mnemonicParsing="false" onAction="#menu_buttons_clicked" prefHeight="76.0" prefWidth="246.0" styleClass="button1" stylesheets="@css/menu.css" text="Παραγγελίες" />
<Button fx:id="medicine_button" layoutX="-7.0" layoutY="215.0" mnemonicParsing="false" onAction="#menu_buttons_clicked" prefHeight="76.0" prefWidth="246.0" styleClass="button1" stylesheets="@css/menu.css" text="Φάρμακα" />
<Button fx:id="kalathi_button" layoutX="-7.0" layoutY="291.0" mnemonicParsing="false" onAction="#menu_buttons_clicked" prefHeight="76.0" prefWidth="246.0" styleClass="button1" stylesheets="@css/menu.css" text="Καλάθι" />
<Button fx:id="dianomis_button" layoutX="-7.0" layoutY="367.0" mnemonicParsing="false" onAction="#menu_buttons_clicked" prefHeight="76.0" prefWidth="246.0" styleClass="button1" stylesheets="@css/menu.css" text="Διανομης" />
<Button fx:id="statistics_button" layoutX="-7.0" layoutY="443.0" mnemonicParsing="false" onAction="#menu_buttons_clicked" prefHeight="76.0" prefWidth="246.0" styleClass="button1" stylesheets="@css/menu.css" text="Στατιστικά" />
<Button fx:id="settings_button" layoutX="-7.0" layoutY="519.0" mnemonicParsing="false" onAction="#menu_buttons_clicked" prefHeight="76.0" prefWidth="246.0" styleClass="button1" stylesheets="@css/menu.css" text="Ρυθμίσεις" />
<Button fx:id="promitheutes_button" layoutX="-7.0" layoutY="595.0" mnemonicParsing="false" onAction="#menu_buttons_clicked" prefHeight="76.0" prefWidth="246.0" styleClass="button1" stylesheets="@css/menu.css" text="Προμηθευτές" />
</children>
</Pane>
</left>
<top>
<Pane prefHeight="48.0" prefWidth="1002.0" style="-fx-background-color: #009fff;" BorderPane.alignment="CENTER">
<children>
<Label fx:id="do_label" layoutX="629.0" layoutY="-1.0" prefHeight="50.0" prefWidth="139.0" text="Χρήστες" textAlignment="CENTER">
<font>
<Font size="34.0" />
</font>
</Label>
<Pane prefHeight="63.0" prefWidth="238.0" style="-fx-background-color: #0099ff;">
<children>
<Label layoutX="28.0" layoutY="4.0" prefHeight="55.0" prefWidth="183.0" text="MedExpress" textAlignment="CENTER">
<font>
<Font size="32.0" />
</font>
<textFill>
<LinearGradient endX="0.023809523809523836" endY="1.0">
<stops>
<Stop color="#862828" />
<Stop color="#a18c8c" offset="1.0" />
</stops>
</LinearGradient>
</textFill>
</Label>
</children>
</Pane>
</children>
</Pane>
</top>
</BorderPane>
</children>
</AnchorPane>