Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: JavaFX + fxml

Aktivity
Avatar
Štěpán Odstrčil:25.9.2019 14:09

Ahoj,
mám nainstalované JDK 12, Eclipse 4.12.0, a stáhl jsem si knihovny javafx 11.0.2.
Trochu jsem zkombinoval tutorial na instalaci javafx tady od vás (na Netbeans) s návodama pro Eclipse co jsem našel jinde na netu.
Podařilo se to zprovoznit a když jsem vložil kód z úvodního tutoriálu (https://www.itnetwork.cz/…od-do-javafx) a spustil, normálně se mi rozjelo nové okno s výpisem verze javy a javyfx.
Když ale pomocí scene builderu vytvořím fxml soubor a chci jej načíst a spustit (podle další lekce v řadě - https://www.itnetwork.cz/…od-do-javafx) tak ať zkouším co zkouším, pořád mi to háže error (viz příloha).

Několik hodin jsem se v tom vrtal - zkoušel jiné verze javafx, přeinstaloval eclipse, jdk, zkoušel jiný VMarguments (nyní mám jen "--add-modules=javaf­x.controls") nebo to celé rozjet v NetBeans (ale háže mi ten stejný error jako Eclipse) a už netuším co dál vyzkoušet.

Budu vděčný za jakkékoliv rady! Předem děkuji, ahoj.

Zkusil jsem:

//----------------------------------------------- MainWindow.java
package viewFX;

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

public class MainWindow extends Application {

        @Override
        public void start(Stage stage) throws Exception {

                FXMLLoader loader=new FXMLLoader(getClass().getResource("PersonOverview.fxml"));
                Parent root = loader.load();

                Scene scene = new Scene(root);

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

        public static void main(String[] args) {
                launch(args);
        }
}
//---------------------------------- PersonOverview.fxml
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ButtonBar?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.SplitPane?>
<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.RowConstraints?>

<fx:root prefHeight="300.0" prefWidth="600.0" type="AnchorPane"
        xmlns="http://javafx.com/javafx/11.0.1"
        xmlns:fx="http://javafx.com/fxml/1"
        fx:controller="viewFX.PersonOverviewController">
        <children>
                <SplitPane dividerPositions="0.29797979797979796"
                        layoutX="119.0" layoutY="32.0" prefHeight="300.0" prefWidth="600.0"
                        AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0"
                        AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
                        <items>
                                <AnchorPane minHeight="0.0" minWidth="0.0"
                                        prefHeight="160.0" prefWidth="100.0">
                                        <children>
                                                <TableView layoutX="-25.0" layoutY="14.0"
                                                        prefHeight="200.0" prefWidth="200.0"
                                                        AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0"
                                                        AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
                                                        <columns>
                                                                <TableColumn prefWidth="75.0" text="First Name" />
                                                                <TableColumn prefWidth="75.0" text="Last Name" />
                                                        </columns>
                                                        <columnResizePolicy>
                                                                <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
                                                        </columnResizePolicy>
                                                </TableView>
                                        </children>
                                </AnchorPane>
                                <AnchorPane minHeight="0.0" minWidth="0.0"
                                        prefHeight="160.0" prefWidth="100.0">
                                        <children>
                                                <Label fx:id="labelEmployeesDetails" layoutX="7.0"
                                                        layoutY="14.0" text="Employee's Details"
                                                        AnchorPane.leftAnchor="5.0" AnchorPane.topAnchor="5.0" />
                                                <GridPane layoutX="-70.0" layoutY="23.0"
                                                        AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0"
                                                        AnchorPane.topAnchor="30.0">
                                                        <columnConstraints>
                                                                <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="Name" />
                                                                <Label text="Health" GridPane.rowIndex="1" />
                                                                <Label text="Position" GridPane.rowIndex="2" />
                                                                <Label text="How Much Work" GridPane.rowIndex="3" />
                                                        </children>
                                                </GridPane>
                                                <ButtonBar layoutX="-63.0" layoutY="244.0"
                                                        prefHeight="40.0" prefWidth="200.0" AnchorPane.bottomAnchor="5.0"
                                                        AnchorPane.rightAnchor="5.0">
                                                        <buttons>
                                                                <Button fx:id="buttonAddNew" mnemonicParsing="false"
                                                                        onAction="#handleButtonAddNewAction" text="Add new" />
                                                                <Button fx:id="buttonEdit" mnemonicParsing="false"
                                                                        onAction="#handleButtonEditAction" text="Edit" />
                                                                <Button fx:id="buttonDelete" mnemonicParsing="false"
                                                                        onAction="#handleButtonDeleteAction" text="Delete" />
                                                        </buttons>
                                                </ButtonBar>
                                        </children>
                                </AnchorPane>
                        </items>
                </SplitPane>
        </children>
</fx:root>

//----------------------------------- PersonOverviewController.java
package viewFX;

import java.awt.Label;
import java.awt.event.ActionEvent;
import java.net.URL;
import java.util.ResourceBundle;

import javafx.fxml.FXML;
import javafx.fxml.Initializable;

public class PersonOverviewController implements Initializable{

        @FXML
        private Label labelEmployeesDetails;

        @FXML
        private void handleButtonAddNewAction(ActionEvent event) {
                System.out.println("You clicked me!");
                labelEmployeesDetails.setText("Klikl jsi na přidat.");
        }
        @FXML
        private void handleButtonEditAction(ActionEvent event) {
                System.out.println("You clicked me!");
                labelEmployeesDetails.setText("Klikl jsi na upravit.");
        }
        @FXML
        private void handleButtonDelteAction(ActionEvent event) {
                System.out.println("You clicked me!");
                labelEmployeesDetails.setText("Klikl jsi na smazat.");
        }

        @Override
        public void initialize(URL url, ResourceBundle rb) {

        }

}

Chci docílit: Snažím se naučit vytvářet okenní aplikace v JavaFX.

 
Odpovědět
25.9.2019 14:09
Avatar
Odpovídá na Štěpán Odstrčil
Petr Štechmüller:25.9.2019 15:19

Ahoj, můžeš sem prosím tě ještě hodit adresářovou strukturu projektu?
Kde máš umístěný zdrojáky *.java a kde *.fxml soubory...

Nahoru Odpovědět
25.9.2019 15:19
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Odpovídá na Petr Štechmüller
Štěpán Odstrčil:26.9.2019 7:38

Jasně,
v příloze přikládám strukturu (v baliku "model" mám jen logiku projektu, která zatím není s FX nijak propojená - to plánuju až mi to bude hezky fungovat) (a ještě dodávám build path knihoven projektu - u nich si nejsem jistý jestli jsem neudělal nějakou blbost; do eclipse jsem přes Help->Instal new software nainstaloval e(fx)clipse a následně ještě knihovny stáhl do pc a vytvořil z nich uživatelský package "JavaFx 11"; ten jsem načetl do ModulePath a do ClassPath pak přidal jednotlive soubory knihovem zvlášť).

 
Nahoru Odpovědět
26.9.2019 7:38
Avatar
Odpovídá na Štěpán Odstrčil
Petr Štechmüller:26.9.2019 10:26

Ahoj, přidej si do nastavení modulů toto:

--add-modules=javafx.controls,javafx.fxml

Ta chyba vlastně říká, že modul javafx.fxml nemá přístup k tvému nepojmenovanému modulu...

Nahoru Odpovědět
26.9.2019 10:26
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Odpovídá na Petr Štechmüller
Štěpán Odstrčil:26.9.2019 16:43

Aha, a tím nastavením modulů myslíš ten "VM arguments" v "run configuration"? (protože to mi stále nefunguje).
Nebo je nastavení modulů něco jiného někde jinde?

 
Nahoru Odpovědět
26.9.2019 16:43
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.