Come da titolo vorrei creare un componente personalizzato per la mia interfaccia fatta con Java FX e FXML quindi ho creato il codice del componente:
e nel mio file FXML ho agguinto (suggerito da NetBeans)codice:public class RedTextField extends TextField implements EventHandler{ public static final int CONTENT_STRING = 1; public static final int CONTENT_NUMBER = 2; public static final int CONTENT_NUMBER_POSITIVE = 3; public static final int CONTENT_NUMBER_CLOSED_POSITIVE = 4; public static final int CONTENT_NUMBER_ZERO_ONE = 5; public static final int CONTENT_NUMBER_ZERO_HUNDRED = 6; public static final int CONTENT_NUMBER_STRICTLY_ZERO_ONE = 7; private int content = CONTENT_NUMBER_CLOSED_POSITIVE; private boolean isOkNumber = true; private double value = 0; public RedTextField(int content){ this(); this.content = content; } public RedTextField() { this(""); } public RedTextField(String text) { super(text); this.setEventHandler(EventType.ROOT, this); } public void setContentType(int i){ this.content = i; } @Override public void handle(Event event) { javafx.scene.text.Font old = this.getFont(); switch(this.content){ case CONTENT_STRING: this.isOkNumber = true; break; case CONTENT_NUMBER: case CONTENT_NUMBER_POSITIVE: case CONTENT_NUMBER_ZERO_ONE: case CONTENT_NUMBER_CLOSED_POSITIVE: case CONTENT_NUMBER_ZERO_HUNDRED: case CONTENT_NUMBER_STRICTLY_ZERO_ONE: try{ this.isOkNumber = true; value = this.isEmpty() ? 0 : Double.parseDouble((String)this.getText()); switch(this.content){ case CONTENT_NUMBER_POSITIVE: if(value<0) throw new Exception(); break; case CONTENT_NUMBER_CLOSED_POSITIVE: if(value<=0) throw new Exception(); break; case CONTENT_NUMBER_ZERO_ONE: if(value<0 || value >1) throw new Exception(); break; case CONTENT_NUMBER_STRICTLY_ZERO_ONE: if(value<=0 || value >=1) throw new Exception(); break; case CONTENT_NUMBER_ZERO_HUNDRED: if(value<0 || value >100) throw new Exception(); break; } System.out.println("OKOKOK"); //this.setBackground(Background.EMPTY); //this.setFont(new Font(old.getName(), Font.PLAIN,old.getSize())); }catch(Exception e){ System.out.println("Eccezione"); //this.setForeground(Color.RED); //this.setFont(new Font(old.getName(), Font.BOLD,old.getSize())); this.isOkNumber = false; } break; } } public boolean isOkNumber(){ if(this.isEmpty()) return false; return isOkNumber; } public boolean isOkNumberEmptyAllowed(){ return isOkNumber; } public boolean isOkNumberEnabled() { if(!this.isEditable()) return true; else return this.isOkNumber(); } public boolean isEmpty(){ String s = this.getText(); s = s.trim(); return s.isEmpty() || s.equalsIgnoreCase(""); } }
però ottengo questo errorecodice:<JavaFXComponents.RedTextField />
Non capisco proprio come fare.... cosa sbaglio?codice:Exception in Application start method java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:483) at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:367) at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:305) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:483) at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767) Caused by: java.lang.RuntimeException: Exception in Application start method at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:894) at com.sun.javafx.application.LauncherImpl.access$000(LauncherImpl.java:56) at com.sun.javafx.application.LauncherImpl$1.run(LauncherImpl.java:158) at java.lang.Thread.run(Thread.java:745) Caused by: javafx.fxml.LoadException: JavaFXComponents.RedTextField is not a valid type. unknown path:18 at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2613) at javafx.fxml.FXMLLoader.createElement(FXMLLoader.java:2790) at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2720) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2527) at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2425) at AAA.NewFXMain.start(NewFXMain.java:29) at com.sun.javafx.application.LauncherImpl$8.run(LauncherImpl.java:837) at com.sun.javafx.application.PlatformImpl$7.run(PlatformImpl.java:335) at com.sun.javafx.application.PlatformImpl$6$1.run(PlatformImpl.java:301) at com.sun.javafx.application.PlatformImpl$6$1.run(PlatformImpl.java:298) at java.security.AccessController.doPrivileged(Native Method) at com.sun.javafx.application.PlatformImpl$6.run(PlatformImpl.java:298) at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) at com.sun.glass.ui.win.WinApplication.access$300(WinApplication.java:39) at com.sun.glass.ui.win.WinApplication$4$1.run(WinApplication.java:112) ... 1 more Exception running application AAA.NewFXMain Java Result: 1

Rispondi quotando
