Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 26
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    315

    visualizzare GUI fatta con JavaFX

    Come da titolo sto iniziando a capire il funzionamento delle GUI fatte con JavaFX e l'utilizzo di FXML.
    Per prima cosa ho seguito questa guida ( http://docs.oracle.com/javafx/sceneb...th-eclipse.htm ) che mi ha permesso di scaricare l'estensione e(fx)clipse e Scene Builder.
    Ho creato prima un JavaFXProject, successivamente al suo interno un FXML Document e poi tramite Scene Builder la mia interfaccia grafica.
    Così è organizzato il progetto:



    Seguendo il manuale, all'interno della classe Main ho scritto questo:
    codice:
    package application;
        
    import java.io.IOException;
    
    import javafx.application.Application;
    import javafx.fxml.FXMLLoader;
    import javafx.stage.Stage;
    import javafx.scene.Parent;
    import javafx.scene.Scene;
    import javafx.scene.layout.BorderPane;
    
    
    public class Main extends Application {
        
        public void start(Stage stage) throws IOException {
            Parent root = FXMLLoader.load(getClass().getResource("TestFXML.fxml"));
            stage.setScene(new Scene(root));
            stage.show();
        }
        
        /*
        @Override
        public void start(Stage primaryStage) {
            try {
                BorderPane root = new BorderPane();
                Scene scene = new Scene(root,400,400);
                scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
                primaryStage.setScene(scene);
                primaryStage.show();
            } catch(Exception e) {
                e.printStackTrace();
            }
        }
        */
        
        public static void main(String[] args) {
            launch(args);
        }
    }
    Ho commentato il codice che era già scritto perchè non devo visualizzare il BorderPane di default ma la mia interfaccia.

    A questo punto ho provato a eseguire come Java Application il file Main.java ma mi dice che c'è un'eccezione nel main:
    codice:
    Exception in Application start method
    java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(Unknown Source)
        at com.sun.javafx.application.LauncherImpl.launchApplication(Unknown Source)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at sun.launcher.LauncherHelper$FXHelper.main(Unknown Source)
    Caused by: java.lang.RuntimeException: Exception in Application start method
        at com.sun.javafx.application.LauncherImpl.launchApplication1(Unknown Source)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$147(Unknown Source)
        at com.sun.javafx.application.LauncherImpl$$Lambda$48/1732398722.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
    Caused by: java.lang.NullPointerException: Location is required.
        at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
        at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
        at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
        at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
        at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
        at javafx.fxml.FXMLLoader.load(Unknown Source)
        at application.Main.start(Main.java:16)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$153(Unknown Source)
        at com.sun.javafx.application.LauncherImpl$$Lambda$51/1285177093.run(Unknown Source)
        at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$166(Unknown Source)
        at com.sun.javafx.application.PlatformImpl$$Lambda$45/1051754451.run(Unknown Source)
        at com.sun.javafx.application.PlatformImpl.lambda$null$164(Unknown Source)
        at com.sun.javafx.application.PlatformImpl$$Lambda$47/483857893.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at com.sun.javafx.application.PlatformImpl.lambda$runLater$165(Unknown Source)
        at com.sun.javafx.application.PlatformImpl$$Lambda$46/1775282465.run(Unknown Source)
        at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
        at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
        at com.sun.glass.ui.win.WinApplication.lambda$null$141(Unknown Source)
        at com.sun.glass.ui.win.WinApplication$$Lambda$37/1109371569.run(Unknown Source)
        ... 1 more
    Exception running application application.Main

    Se non ho capito male non riesce a caricare il file fxml da me creato che contiene l'interfaccia, eppure si trova nella stessa cartella di progetto.
    Mi aiutate a capire?
    Ultima modifica di newutente; 31-01-2015 a 11:05

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    315
    Ho risolto, semplicemente ho fatto l'errore stupidissimo di mettere il file fxml fuori dalla cartella "application" e quindi non lo trovava.

    Avrei una domanda adesso. In tutta sincerità l'interfaccia, semplicissima, l'ho creata usando Scene Builder e non scrivendo io il codice all'interno del file fxml. Vorrei sapere, questo è permesso quando si lavora in azienda? Cioè, nelle aziende viene utilizzato questo tool oppure si scrive a mano il codice?
    Ultima modifica di newutente; 01-02-2015 a 12:35

  3. #3
    da mia esperienza, non penso che in azienda ti impediscano di usare uno strumento come scene builder.
    più che altro potrebbero chiedere cose che lo scene builder "non è in grado" di fare, e quindi secondo me sapere mettere mano al codice è fondamentale.
    non puoi permetterti di dire cose del tipo "ma lo scende builder non lo può fare, e quindi non si può fare"....

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    315
    Quindi diciamo che sarebbe utile conoscere un po' di XML e non affidarsi totalmente al tool, insomma bisogna capire anche cosa il tool fa.

    Nel mio progetto devo ora aggiungere un'interfaccia fatta con JavaFX. Ho letto che è possibile usare JavaFX insieme a AWT/Swing però mi chiedo, visto che AWT/Swing non saranno più usate non mi conviene concentrarmi esclusivamente su JavaFX nella creazione della mia interfaccia? Insomma non vorrei utilizzare AWT e Swing e abituarmi al loro utilizzo se da qui a breve non saranno più usate.
    Ultima modifica di newutente; 01-02-2015 a 13:02

  5. #5
    Da ciò che ho cpt però javafx sembra poco utilizzato ancora

  6. #6
    Quote Originariamente inviata da newutente Visualizza il messaggio
    Quindi diciamo che sarebbe utile conoscere un po' di XML e non affidarsi totalmente al tool, insomma bisogna capire anche cosa il tool fa.
    si esatto, ma questo vale un pò per tutto.

    Quote Originariamente inviata da newutente Visualizza il messaggio
    Nel mio progetto devo ora aggiungere un'interfaccia fatta con JavaFX. Ho letto che è possibile usare JavaFX insieme a AWT/Swing però mi chiedo, visto che AWT/Swing non saranno più usate non mi conviene concentrarmi esclusivamente su JavaFX nella creazione della mia interfaccia? Insomma non vorrei utilizzare AWT e Swing e abituarmi al loro utilizzo se da qui a breve non saranno più usate.
    ma chi l'ha detto che swing non verrà più usato??
    javafx è un valida alternativa che sta prendendo piede, ma non penso che swing verrà eliminato nell prossime versioni di java.

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    315
    Quote Originariamente inviata da fermat Visualizza il messaggio
    ma chi l'ha detto che swing non verrà più usato??
    javafx è un valida alternativa che sta prendendo piede, ma non penso che swing verrà eliminato nell prossime versioni di java.
    no, non intendevo che verrà eliminato dalle versioni di Java ma semplicemente che magari le aziende nei loro progetti non faranno più utilizzare ai loro sviluppatori la libreria Swing se c'è un'altra libreria in crescita come JavaFX. Però se mi dite che non è così ok.

    Ma quindi cosa conviene fare dovendo creare un'interfaccia per un progetto? Farla all'interno di codice java "normalmente" come con Swing oppure utilizzare FXML?

  8. #8
    buongiorno..ho creato l'interfaccia grafica .ho anche il codice di quello che devo fare però non sò bene come posizionarlo e come associare i tasti al codice stesso in modo che funzioni il tutto.qualcuno mi può aiutare grazie

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    315
    Avrei bisogno del vostro aiuto per risolvere un problema che ho.
    Ho creato una interfaccia utilizzando la libreria JavaFX tramite il tool Scene Builder. Ho anche, per testarla, provato a gestire l'evento di pressione di un bottone che mi dovrebbe stampare il nome che inserisco. Il problema però è che il programma non mi parte proprio perchè mi viene sollevata una eccezione.

    Questo è il codice:
    codice:
    package com.java8.mod19.application;
        
    import java.io.IOException;
    
    import javafx.application.Application;
    import javafx.stage.Stage;
    import javafx.scene.Parent;
    import javafx.scene.Scene;
    import javafx.scene.layout.AnchorPane;
    import javafx.scene.layout.GridPane;
    import javafx.fxml.FXMLLoader;
    
    
    public class Main extends Application {
        @Override
        public void start(Stage stage) throws IOException {
                stage.setTitle("Rubrica");
                GridPane root = (GridPane) FXMLLoader.load(getClass().getResource("Rubrica.fxml"));
                stage.setScene(new Scene(root));
                stage.show();
        }
        
        public static void main(String[] args) {
            launch(args);
        }
    }
    codice:
    package com.java8.mod19.application;
    
    import javafx.event.ActionEvent;
    import javafx.fxml.FXML;
    import javafx.scene.control.Button;
    import javafx.scene.control.Label;
    import javafx.scene.control.TextField;
    
    public class SampleController {
        
        @FXML
        private TextField textFieldNome;
        
        @FXML
        private TextField textFieldIndirizzo;
        
        @FXML
        private TextField textFieldNumero;
        
        @FXML
        private Button buttonAggiungi;
        
        @FXML
        private TextField textFieldDaCercare;
        
        @FXML
        private Label labelCercato;
        
        @FXML
        private Button buttonCerca;
        
        @FXML
        public void initialize() {
            
            assert textFieldNome != null : "fx:id=\"textFieldNome\" was not injected: check your FXML file 'Rubrica.fxml'.";
            assert textFieldIndirizzo != null : "fx:id=\"textFieldIndirizzo\" was not injected: check your FXML file 'Rubrica.fxml'.";
            assert textFieldNumero != null : "fx:id=\"textFieldNumero\" was not injected: check your FXML file 'Rubrica.fxml'.";
            assert buttonAggiungi != null : "fx:id=\"buttonAggiungi\" was not injected: check your FXML file 'Rubrica.fxml'.";
            assert textFieldDaCercare != null : "fx:id=\"textFieldDaCercare\" was not injected: check your FXML file 'Rubrica.fxml'.";
            assert labelCercato != null : "fx:id=\"labelCercato\" was not injected: check your FXML file 'Rubrica.fxml'.";
            assert buttonCerca != null : "fx:id=\"buttonCerca\" was not injected: check your FXML file 'Rubrica.fxml'.";
    
            
            buttonCerca.setOnAction((ActionEvent event) -> {
                                                                String nome = textFieldDaCercare.getText();
                                                                labelCercato.setText(nome);
                                                           });
             
        }
    }
    codice:
    <?xml version="1.0" encoding="UTF-8"?>
    
    <?import javafx.scene.control.*?>
    <?import javafx.geometry.*?>
    <?import java.lang.*?>
    <?import javafx.scene.layout.*?>
    <?import javafx.scene.layout.GridPane?>
    
    <GridPane hgap="10.0" maxHeight="400.0" maxWidth="350.0" minHeight="400.0" minWidth="350.0" prefHeight="400.0" prefWidth="350.0" vgap="10.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.java8.mod19.application.SampleController">
       <opaqueInsets>
          <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
       </opaqueInsets>
       <columnConstraints>
          <ColumnConstraints maxWidth="168.0" minWidth="10.0" prefWidth="168.0" />
          <ColumnConstraints maxWidth="250.0" minWidth="120.0" prefWidth="149.0" />
       </columnConstraints>
       <rowConstraints>
          <RowConstraints minHeight="10.0" prefHeight="30.0" />
          <RowConstraints minHeight="10.0" prefHeight="30.0" />
          <RowConstraints minHeight="10.0" prefHeight="30.0" />
          <RowConstraints minHeight="10.0" prefHeight="30.0" />
          <RowConstraints minHeight="10.0" prefHeight="30.0" />
          <RowConstraints maxHeight="42.0" minHeight="10.0" prefHeight="30.0" />
          <RowConstraints maxHeight="30.0" minHeight="10.0" prefHeight="30.0" />
          <RowConstraints maxHeight="30.0" minHeight="10.0" prefHeight="30.0" />
          <RowConstraints maxHeight="30.0" minHeight="10.0" prefHeight="30.0" />
          <RowConstraints maxHeight="30.0" minHeight="10.0" prefHeight="30.0" />
       </rowConstraints>
       <padding>
          <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
       </padding>
       <children>
          <Label id="Label1" text="INSERISCI DATI PERSONE">
             <opaqueInsets>
                <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
             </opaqueInsets>
          </Label>
          <TextField id="textFieldNome" text="nome" GridPane.columnIndex="1" />
          <TextField id="textFieldIndirizzo" text="indirizzo" GridPane.columnIndex="1" GridPane.rowIndex="1" />
          <TextField id="textFieldTelefono" text="telefono" GridPane.columnIndex="1" GridPane.rowIndex="2" />
          <Button id="buttonAggiungi" alignment="CENTER" mnemonicParsing="false" text="AGGIUNGI" GridPane.columnIndex="1" GridPane.halignment="RIGHT" GridPane.rowIndex="3" GridPane.valignment="CENTER" />
          <Separator prefWidth="200.0" GridPane.columnSpan="2" GridPane.rowIndex="4" />
          <Label text="INSERISCI NOME DA CERCARE" GridPane.rowIndex="5" />
          <TextField id="textFieldDaCercare" text="nome" GridPane.columnIndex="1" GridPane.rowIndex="5" />
          <Button id="buttonCerca" mnemonicParsing="false" text="CERCA" GridPane.columnIndex="1" GridPane.halignment="RIGHT" GridPane.rowIndex="9" GridPane.valignment="CENTER" />
          <Label id="labelCercato" GridPane.columnIndex="1" GridPane.rowIndex="6" GridPane.rowSpan="3" />
       </children>
    </GridPane>


    Questo invece è il messaggio di errore:
    codice:
    Exception in Application start method
    java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(Unknown Source)
        at com.sun.javafx.application.LauncherImpl.launchApplication(Unknown Source)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at sun.launcher.LauncherHelper$FXHelper.main(Unknown Source)
    Caused by: java.lang.RuntimeException: Exception in Application start method
        at com.sun.javafx.application.LauncherImpl.launchApplication1(Unknown Source)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$147(Unknown Source)
        at com.sun.javafx.application.LauncherImpl$$Lambda$48/128893786.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
    Caused by: javafx.fxml.LoadException: 
    /C:/Users/utente/Desktop/JAVA/PRATICA/modulo%2019/esercizi%20supplementari/19.b%20(FXML)/bin/com/java8/mod19/application/Rubrica.fxml
    
        at javafx.fxml.FXMLLoader.constructLoadException(Unknown Source)
        at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
        at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
        at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
        at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
        at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
        at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
        at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
        at javafx.fxml.FXMLLoader.load(Unknown Source)
        at com.java8.mod19.application.Main.start(Main.java:18)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$153(Unknown Source)
        at com.sun.javafx.application.LauncherImpl$$Lambda$51/1657476094.run(Unknown Source)
        at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$166(Unknown Source)
        at com.sun.javafx.application.PlatformImpl$$Lambda$45/1051754451.run(Unknown Source)
        at com.sun.javafx.application.PlatformImpl.lambda$null$164(Unknown Source)
        at com.sun.javafx.application.PlatformImpl$$Lambda$47/541423010.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at com.sun.javafx.application.PlatformImpl.lambda$runLater$165(Unknown Source)
        at com.sun.javafx.application.PlatformImpl$$Lambda$46/1775282465.run(Unknown Source)
        at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
        at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
        at com.sun.glass.ui.win.WinApplication.lambda$null$141(Unknown Source)
        at com.sun.glass.ui.win.WinApplication$$Lambda$37/1109371569.run(Unknown Source)
        ... 1 more
    Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at sun.reflect.misc.Trampoline.invoke(Unknown Source)
        at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at sun.reflect.misc.MethodUtil.invoke(Unknown Source)
        ... 23 more
    Caused by: java.lang.NullPointerException
        at com.java8.mod19.application.SampleController.initialize(SampleController.java:44)
        ... 32 more
    Exception running application com.java8.mod19.application.Main


    Mi aiutate a risolvere il problema?
    Ultima modifica di newutente; 02-02-2015 a 20:05

  10. #10
    questa riga già da un errore:
    codice:
    /C:/Users/utente/Desktop/JAVA/PRATICA/modulo%2019/esercizi%20supplementari/19.b%20(FXML)/bin/com/java8/mod19/application/Rubrica.fxml
    non mettere spazi tra i nomi delle directory e dei files.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.