Body zdarma Java týden
Využij podzimních slev a získej od nás až 40 % bodů zdarma! Více zde
Pouze tento týden sleva až 80 % na Java e-learning!

Diskuze: JavaFX + fxml

Aktivity (2)
Avatar
Štěpán Odstrčil:25. září 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. září 14:09
Avatar
Petr Štechmüller
Překladatel
Avatar
Odpovídá na Štěpán Odstrčil
Petr Štechmüller:25. září 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  +1 25. září 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. září 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. září 7:38
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Petr Štechmüller
Překladatel
Avatar
Odpovídá na Štěpán Odstrčil
Petr Štechmüller:26. září 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. září 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. září 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. září 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.