UI aus FXML und Java gemischt - NPE?

dzim

Top Contributor
Hi,

ich habe ein etwas seltsames Problem:
Ich hab mir - in Ermangelung durch die API - eine abstrakte Dialog-Klasse (zugegebenermaßen inspiriert durch jFace/SWT) geschrieben, die ich nun für einen Passwort-Dialog implementiere. Die OK- und Cancel-Buttons sind über die Dialog-API erstellt worden, der Rest (ein Text, ein Label und ein PasswordField) über FXML. Der Dialog wird auch als Controller für die Änderung am PasswordField verwendet.
Konkret ist zu Beginn der OK-Button (programmatisch) deaktivert. Soll aber bei einer sinnvollen Eingabe eines Passworts wieder aktiviert werden.
Seltsamerweise ist der Button zwar abrufbar und nicht null, aber viele seiner Felder, so auch der Parent, sind es. Ergebnis ist, dass ich den disabled-Status der Buttons nicht umsetzen kann.
Ich vermute, dass hier der FXMLLoader eine eigene Klasse des Dialogs (mit Kopie der Elemente des originalen) als Controller erstellt und nicht auf die Daten des "richtigen" Dialogs zugreift. Aber sicher bin ich mir nicht. Genausowenig, wie ich das Problem umgehen kann.

Kennt jemand das Problem???
Wenn's hilft, poste ich auch den Code, aber das ist dann doch schon etwas zu viel und wahrscheinlich nicht mehr "mal eben" durchzuschauen.

Daniel
 

Paddelpirat

Bekanntes Mitglied
Dann schreib dir am besten mal ein ganz kleines Testprogramm indem du vielleicht nur einen Button drin hast und teste, ob du dort das Verhalten reproduzieren kannst. Wenn ja, kann man sich den Code ja mal anschauen.
 

dzim

Top Contributor
Ich hab das Problem gestern Abend noch in den Griff bekommen. Ich hatte die Frage auch noch im Oracle- und efxclipse-Forum (bzw. der Google Group) gestellt.

Der Tom Schindl von efxclipse hatte mir einen Hinweis gegeben, den ich erst nicht verstanden hab, aber später die Lösung daraus entwickeln konnte.

Ich hab es erst so gemacht (der Controller stand bei mir im FXML, bzw. im efxclispe FXGraph drin):
Java:
public class PasswortDialog extends Dialog<String> {

	private static final String WINDOW_TITLE = "PWM";

	public PasswortDialog() {
		super(null, Modality.APPLICATION_MODAL, StageStyle.DECORATED,
				WINDOW_TITLE);
		Button ok = addButton(ButtonID.OK);
		addButton(ButtonID.CANCEL);
		ok.setDisable(true);
	}

	@Override
	protected Node createCenterContent() {
		try {
			Node node = FXMLLoader.<Node> load(PasswortDialog.class
			                                      .getResource("PasswordDialog.fxml"));
			return node;
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}

	@FXML
	private PasswordField passwordField;

	@FXML
	private Button button;

	@FXML
	public void passwordCheck(KeyEvent e) {

		result = passwordField.getText();

		Button ok = getButton(ButtonID.OK);
		ok.setDisable(result == null || result.isEmpty());
		button.setDisable(result == null || result.isEmpty());
	}
}

Dadurch wurde aber anscheinend tatsächlich eine separate Instanz des Dialogs gebaut, wenn es um den Controller ging (ich vermute, dort wurde die Struktur des tasächlichen Dialogs durch den FXMLLoader nur nachgebaut, daher existierte keine echte visuelle Repräsentation der Buttons, die ich manipulieren wollte.

Richtig dagegen ist, es so hier zu machen:
Java:
	@Override
	protected Node createCenterContent() {
		try {
			FXMLLoader loader = new FXMLLoader();
			loader.setController(this);
			loader.setLocation(PasswortDialog.class
					.getResource("PasswordDialog.fxml"));
			Node node = (Node) loader.load();
			return node;
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}

Alternativ auch (das wäre Toms Vorschlag gewesen):
Java:
	@Override
	protected Node createCenterContent() {
		try {
			FXMLLoader loader = new FXMLLoader();
			loader.setControllerFactory(new Callback<Class<?>, Object>() {            
				@Override
				public Object call(Class<?> param) {
					return PasswortDialog.this;
				}
			});
			loader.setLocation(PasswortDialog.class
					.getResource("PasswordDialog.fxml"));
			Node node = (Node) loader.load();
			return node;
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}

Also: Falls du mal in die Situation kommst, dich über so ein Phänomen zu wundern: Jetzt kennst du es auch ;-)

PS: Wenn du Interesse an der Dialog-Klasse hast, sag bescheid - kann ich ja mal posten...
 

Paddelpirat

Bekanntes Mitglied
Ah, ich glaube mir wär das Problem nicht untergekommen, weil ich mit Netbeans arbeite und dort die ganzen JavaFX Projekte direkt ein bisschen Beispielcode enthalten, wie man es machen sollte. ;)

Werde mir das aber bei Gelegenheit mal genauer angucken. Find die ganzen JavaFX-Sachen schon recht interessant. Leider ist das hier im Forum noch nicht wirklich verbreitet, merkt man glaub ich auch an der Anzahl der Leute, die sich bei den Themen zu Wort melden *g*. Von daher: Beispielcode immer her damit. ;)
 

dzim

Top Contributor
Hehe - ja, das ist bemerkbar.
Ich bin halt Eclipse-Fan und bin daher froh, das es e(fx)clipse gibt. Ich glaube ich lerne es dadurch eben auf die "harte" Tour :-D

Hier meine Dialog-Klasse (nicht wirklich perfekt, aber erst mal ein Anfang):
Java:
package de.dzim.jfx.dialog;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.stage.Modality;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
import javafx.stage.Window;
import de.dzim.jfx.pwm.util.InternalAdapter;
import de.dzim.jfx.resource.ImageResource;
import de.dzim.jfx.resource.ImageResource.ImageResourceType;

public abstract class Dialog<T> extends Stage implements InternalAdapter {

	/**
	 * Default constructor.
	 * 
	 * @param owner
	 * @param modality
	 * @param style
	 * @param title
	 */
	public Dialog(Window owner, Modality modality, StageStyle style,
			String title) {

		super(style);

		initOwner(owner);
		initModality(modality);
		setOpacity(1);
		if (title != null && !title.isEmpty())
			setTitle(title);
	}

	/**
	 * Default constructor without a text for the dialogs title.
	 * 
	 * @param owner
	 * @param modality
	 * @param style
	 */
	public Dialog(Window owner, Modality modality, StageStyle style) {
		this(owner, modality, style, null);
	}

	/**
	 * Default constructor without a specific StageStyle.
	 * 
	 * @param owner
	 * @param modality
	 * @param title
	 */
	public Dialog(Window owner, Modality modality, String title) {
		this(owner, modality, null, title);
	}

	/**
	 * This constructor is for convenience, be sure to set the owner, the
	 * modality the title and so on, before you show it!
	 */
	public Dialog() {
	}

	private Double contentHeight;
	private Double contentWidth;

	/**
	 * set the min size of this dialog, must be set before the methods
	 * {@link #show()}, {@link #showAndWait()} or {@link #showDialog()} are
	 * used.
	 * 
	 * @param height
	 * @param width
	 */
	public void setMinSize(double height, double width) {
		contentHeight = height;
		contentWidth = width;
	}

	/**
	 * See the parent {@link #showAndWait()} method. Simply returns a custom
	 * value, if the implementation make use of it, otherwise the value might be
	 * <code>null</code>.
	 * 
	 * @return a result, might be <code>null</code>
	 */
	public T showDialog(boolean wait) {

		createDialogContent();

		if (wait)
			super.showAndWait();
		else
			super.show();

		return result;
	}

	public T showDialog() {
		return showDialog(true);
	}

	/**
	 * a might-be result
	 */
	protected T result;

	/**
	 * The result on "ok"/"cancel" (if not overrided).
	 */
	protected Boolean closeAs;

	/**
	 * The dialog content.
	 */
	protected BorderPane borderPane;

	/**
	 * The dialogs main content.
	 */
	private Node centerNode;

	/**
	 * A horizontal box of buttons.
	 */
	private HBox buttonHBox;

	private Map<ButtonID, Button> buttons = new HashMap<ButtonID, Button>();
	private Map<String, Button> customButtons = new HashMap<String, Button>();
	private List<Button> orderedButtonList = new ArrayList<Button>();

	/**
	 * A custom CSS stylesheet.
	 */
	private String stylesheetLocation = null;

	/**
	 * create the container and load the stuff for the center of the BorderPane
	 * by calling the abstract method {@link #createCenterContent()}
	 */
	private void createDialogContent() {

		borderPane = new BorderPane();
		borderPane.setUserData(this);
		borderPane.setId("dialog");

		borderPane.setPadding(new Insets(10, 10, 10, 10));

		buttonHBox = new HBox(5);
		buttonHBox.setUserData(this);
		buttonHBox.setAlignment(Pos.BOTTOM_RIGHT);
		buttonHBox.setPadding(new Insets(5, 5, 0, 5));

		for (Button b : orderedButtonList)
			buttonHBox.getChildren().add(b);

		centerNode = createCenterContent();
		centerNode.setUserData(this);
		if (centerNode != null)
			borderPane.setCenter(centerNode);

		borderPane.setBottom(buttonHBox);

		if (contentHeight != null)
			borderPane.setMinHeight(contentHeight);
		if (contentWidth != null)
			borderPane.setMinWidth(contentWidth);

		BorderPane.setAlignment(centerNode, Pos.CENTER);
		BorderPane.setAlignment(buttonHBox, Pos.BOTTOM_RIGHT);

		this.showingProperty().addListener(new ChangeListener<Boolean>() {

			@Override
			public void changed(ObservableValue<? extends Boolean> observable,
					Boolean oldValue, Boolean newValue) {
				if (newValue) {
					Dialog.this.layout();
				}
			}
		});
		Scene scene = new Scene(borderPane);
		if (stylesheetLocation != null)
			scene.getStylesheets().add(stylesheetLocation);
		this.setScene(scene);
	}

	void layout() {

		double maxWidth = 0;
		for (Button b : orderedButtonList) {
			maxWidth = Math.max(maxWidth, b.prefWidth(-1));
		}

		for (Button b : orderedButtonList) {
			b.setPrefWidth(maxWidth);
		}

		// Point2D size = getInitialSize();
		// stage.setWidth(size.getX());
		// stage.setHeight(size.getY());
		// stage.sizeToScene();
	}

	/**
	 * Set a custom stylsheet to be used by the dialog.
	 * 
	 * @param stylesheetLocation
	 *            Since a relative path would mean relative to the Dialog class,
	 *            you might need to specify a full path.
	 * @see {@link #stylesheetLocation}
	 */
	public void setStylesheetLocation(String stylesheetLocation) {
		this.stylesheetLocation = stylesheetLocation;
	}

	/**
	 * The parent for the content is a BorderPane and will per default be added
	 * to center. The bottom of the pane is used for the buttons - an HBox.
	 * </br>Keep that in mind when trying to add other elements to this
	 * BorderPane: You "only" have the top, left and right positions left for
	 * other content.
	 * 
	 * @return
	 */
	protected abstract Node createCenterContent();

	/**
	 * see {@link #showDialog()}
	 * 
	 * @return a result, might be <code>null</code>
	 */
	public T getResult() {
		return result;
	}

	/**
	 * for any unmodified OK/CANCEL result.
	 * 
	 * @return
	 */
	public Boolean getCloseAs() {
		return closeAs;
	}

	/**
	 * Add a default button (text &amp; icon).
	 * 
	 * @param buttonId
	 * @return
	 */
	public Button addButton(ButtonID buttonId) {
		Button b = new Button();
		b.setText(buttonId.title);
		if (buttonId.icon != null)
			b.setGraphic(new ImageView(buttonId.icon));
		switch (buttonId) {
		case OK:
			b.setOnAction(new EventHandler<ActionEvent>() {
				@Override
				public void handle(final ActionEvent event) {
					handleOk(event);
				}
			});
			b.setDefaultButton(true);
			break;
		case CANCEL:
			b.setOnAction(new EventHandler<ActionEvent>() {
				@Override
				public void handle(final ActionEvent event) {
					handleCancel(event);
				}
			});
			break;
		case NEXT:
			b.setOnAction(new EventHandler<ActionEvent>() {
				@Override
				public void handle(final ActionEvent event) {
					handleNext(event);
				}
			});
			break;
		case BACK:
			b.setOnAction(new EventHandler<ActionEvent>() {
				@Override
				public void handle(final ActionEvent event) {
					handleBack(event);
				}
			});
			break;
		case HELP:
			b.setOnAction(new EventHandler<ActionEvent>() {
				@Override
				public void handle(final ActionEvent event) {
					handleHelp(event);
				}
			});
			break;
		}
		orderedButtonList.add(b);
		buttons.put(buttonId, b);
		return b;
	}

	/**
	 * add a custom button with a custom id for it.
	 * 
	 * @param id
	 * @param button
	 * @return
	 */
	public Button addCustomButton(String id, Button button) {
		orderedButtonList.add(button);
		customButtons.put(id, button);
		return button;
	}

	/**
	 * The default implementation for the "ok" button sets the {@link #closeAs}
	 * value to <code>true</code> and closes the window.
	 * 
	 * @param event
	 */
	protected void handleOk(ActionEvent event) {
		Dialog.this.closeAs = Boolean.TRUE;
		Dialog.this.close();
	}

	/**
	 * The default implementation for the "ok" button sets the {@link #closeAs}
	 * value to <code>false</code> and closes the window.
	 * 
	 * @param event
	 */
	protected void handleCancel(ActionEvent event) {
		Dialog.this.closeAs = Boolean.FALSE;
		Dialog.this.close();
	}

	/**
	 * The default implementation for the "next" button does nothing.
	 * 
	 * @param event
	 */
	protected void handleNext(ActionEvent event) {
	}

	/**
	 * The default implementation for the "back" button does nothing.
	 * 
	 * @param event
	 */
	protected void handleBack(ActionEvent event) {
	}

	/**
	 * The default implementation for the "help" button does nothing.
	 * 
	 * @param event
	 */
	protected void handleHelp(ActionEvent event) {
	}

	/**
	 * get a default button
	 * 
	 * @param buttonID
	 * @return
	 */
	public Button getButton(ButtonID buttonID) {
		return buttons.get(buttonID);
	}

	/**
	 * get a custom button via it's id
	 * 
	 * @param id
	 * @return
	 */
	public Button getCustomButton(String id) {
		return customButtons.get(id);
	}

	@Override
	public Object getInternalAdapter(Class<?> adapter) {
		if (List.class.isAssignableFrom(adapter))
			return orderedButtonList;
		return null;
	}

	/**
	 * Default IDs for the buttons at the bottom HBox of the parent BorderPane.
	 * 
	 * @author dzimmermann
	 * 
	 */
	public enum ButtonID {
		// ok
		OK("_OK", ImageResource.getImage(ImageResourceType.OK_16)),
		// cancel
		CANCEL("_Cancel", ImageResource.getImage(ImageResourceType.CANCEL_16)),
		// next
		NEXT("_Next", ImageResource.getImage(ImageResourceType.NEXT)),
		// back
		BACK("_Back", ImageResource.getImage(ImageResourceType.BACK)),
		// help
		HELP("_Help", ImageResource.getImage(ImageResourceType.QUESTION_16));

		private final String title;
		private final Image icon;

		private ButtonID(String title, Image icon) {
			this.title = title;
			this.icon = icon;
		}

		public String getTitle() {
			return title;
		}

		public Image getIcon() {
			return icon;
		}
	}
}

Verwendung noch mal am Beispiel des Passwort-Dialogs:
Java:
package de.dzim.jfx.pwm.ui.dialog;

import java.io.IOException;

import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Node;
import javafx.scene.control.PasswordField;
import javafx.scene.input.KeyEvent;
import javafx.stage.Modality;
import javafx.stage.StageStyle;
import javafx.stage.Window;

import javax.xml.bind.JAXBException;

import de.dzim.jfx.dialog.Dialog;
import de.dzim.jfx.pwm.model.container.PWMContainerGroup;
import de.dzim.jfx.pwm.model.content.PWMGroup;
import de.dzim.jfx.pwm.util.PWMUtils;

public class PasswortDialog extends Dialog<String> {

	private static final String WINDOW_TITLE = "PWM";

	private final PWMContainerGroup containerGroup;

	public PasswortDialog(Window owner, PWMContainerGroup containerGroup) {

		super(owner, Modality.APPLICATION_MODAL, StageStyle.DECORATED,
				WINDOW_TITLE);
		this.containerGroup = containerGroup;

		addButton(ButtonID.OK).setDisable(true);
		addButton(ButtonID.CANCEL);
		
		setStylesheetLocation("de/dzim/jfx/pwm/ui/pwm-dialog.css");
	}

	@Override
	protected Node createCenterContent() {
		try {
			// Node node = FXMLLoader.<Node> load(PasswortDialog.class
			// .getResource("PasswordDialog.fxml"));
			FXMLLoader loader = new FXMLLoader();
			loader.setController(this);
			loader.setLocation(PasswortDialog.class
					.getResource("PasswordDialog.fxml"));
			Node node = (Node) loader.load();
			return node;
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}

	@FXML
	private PasswordField passwordField;

	@FXML
	public void passwordCheck(KeyEvent e) {
		PWMGroup group = null;
		try {
			group = PWMUtils.loadPWMGroup(containerGroup,
					passwordField.getText());
			result = passwordField.getText();
		} catch (JAXBException e1) {
		}
		getButton(ButtonID.OK).setDisable(group == null);
	}
}

Verbesserungsvorschläge? Immer her damit!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Jose05 Aus einer normalen Java Klasse eine FXML-Klasse laden AWT, Swing, JavaFX & SWT 12
T FXML Datei in Java Code einbinden: javafx.fxml.LoadException AWT, Swing, JavaFX & SWT 2
R JavaFX Java FXML Vererbung in Klassen AWT, Swing, JavaFX & SWT 9
S java.fxml.load.exception und keine automatische Aktualliseriung der Mainausgabe AWT, Swing, JavaFX & SWT 5
D Java FXML mehrere Fenster AWT, Swing, JavaFX & SWT 4
Ernesto95 JavaFX FXML vs. Java Code AWT, Swing, JavaFX & SWT 3
S JavaFX FXML-Editor mit Java 7? AWT, Swing, JavaFX & SWT 2
X Java Fxml laden AWT, Swing, JavaFX & SWT 4
MiMa Darstellung von FXML ateien nicht korrekt (SceneBuilder) AWT, Swing, JavaFX & SWT 2
Georges456 NetBeans am Mac leider ohne FXML AWT, Swing, JavaFX & SWT 17
R Fxml findet controller nicht AWT, Swing, JavaFX & SWT 2
thor_norsk JavaFX, FXML und SceneBuilder AWT, Swing, JavaFX & SWT 6
Jose05 JavaFx Fxml: GUI aus einer anderen Klasse starten AWT, Swing, JavaFX & SWT 1
K Bekomme (u.a) javafx.fxml.LoadException trotz "korrektem" Code AWT, Swing, JavaFX & SWT 8
G JavaFX Wert aus DB lesen, wenn erfolgreich automatisch eine fxml laden, möglich? AWT, Swing, JavaFX & SWT 2
N Braucht man fxml AWT, Swing, JavaFX & SWT 3
S Fehler beim Öffnen weiterer FXML AWT, Swing, JavaFX & SWT 11
Jose05 JavaFX: eigene FXML-Datei für einen Button AWT, Swing, JavaFX & SWT 3
M mvvm umsetzen ohne fxml AWT, Swing, JavaFX & SWT 0
L JavaFX .fxml laden klappt nicht AWT, Swing, JavaFX & SWT 16
J JavaFX - Included FXML - Entfernen feststellen AWT, Swing, JavaFX & SWT 2
L JavaFX javafx.fxml.LoadException bei einem Taschenrechner AWT, Swing, JavaFX & SWT 5
G JavaFX Verständnisfrage mit parametrisierten Methoden und FXML AWT, Swing, JavaFX & SWT 21
Ø Ein FXML-File mehrfach einfügen AWT, Swing, JavaFX & SWT 6
MiMa Schliessen eines FXML Fensters? AWT, Swing, JavaFX & SWT 10
OSchriever Auf Stage von FXML-Controller zugreifen AWT, Swing, JavaFX & SWT 12
L JavaFX Exception nach includieren einer fxml // nested controller AWT, Swing, JavaFX & SWT 1
R FXML File kann nicht hinzugefügt werden! AWT, Swing, JavaFX & SWT 2
J FXML - Internationalisierung - Behandung key not found AWT, Swing, JavaFX & SWT 39
J import javafx.fxml* bei JavaFX 13 geht nicht mehr AWT, Swing, JavaFX & SWT 7
S JavaFX Variablen in einem FXML File verwenden AWT, Swing, JavaFX & SWT 8
T Fxbefehle aus Main umwandeln in @FXML AWT, Swing, JavaFX & SWT 21
L JavaFX JavaFX, FXML und Guice? AWT, Swing, JavaFX & SWT 0
H 3 verschiedene Nachrichten in einer FXML View die Infos kommen aus DB AWT, Swing, JavaFX & SWT 4
H JavaFX Probleme Beim Wechseln der scene als .fxml AWT, Swing, JavaFX & SWT 7
TheWhiteShadow JavaFX Dependencies in fxml AWT, Swing, JavaFX & SWT 17
M JavaFX Altes Fenster (FXML Datei) löschen AWT, Swing, JavaFX & SWT 16
F Java FX Von der Fxml Datei zum Objekt AWT, Swing, JavaFX & SWT 8
F FXML Datei aus dem SceneBuilder in Eclipse aufrufen AWT, Swing, JavaFX & SWT 1
I MediaPlayer (MediaView) in FXML (source) AWT, Swing, JavaFX & SWT 0
I FXML: StackPane als Root-Element AWT, Swing, JavaFX & SWT 5
I Bild über FXML (ImageView, Image) anzeigen AWT, Swing, JavaFX & SWT 1
MiMa Übergeben von Paramter bei FXML Aufruf? AWT, Swing, JavaFX & SWT 8
MiMa Wie bettet man Programmcode in JavaFX FXML ein? AWT, Swing, JavaFX & SWT 34
H Java FX List<AlbumsBean> in FXML TableView AWT, Swing, JavaFX & SWT 37
B FXML GUI - Button ausblenden AWT, Swing, JavaFX & SWT 1
D JavaFX Einbinden einer .fxml AWT, Swing, JavaFX & SWT 1
L JavaFX Zugriff auf HostServices im FXML Controller AWT, Swing, JavaFX & SWT 1
T Pfad zur *.fxml AWT, Swing, JavaFX & SWT 8
L Liniendiagramme mit FXML: Quellen mit konkreten Beispielen AWT, Swing, JavaFX & SWT 0
S JavaFX fxml datein mit menübar ändern AWT, Swing, JavaFX & SWT 20
K JavaFX JavaFX und FXML AWT, Swing, JavaFX & SWT 6
F Problem mit der FXML Rectangle Shape AWT, Swing, JavaFX & SWT 2
H JavaFX aus der .fxml Datei einen Konstruktor bedienen AWT, Swing, JavaFX & SWT 3
H JavaFX via .fxml einen abgeleiteten Button erstellen... AWT, Swing, JavaFX & SWT 4
E Java FX FXML Problem mit html Scriptausführung AWT, Swing, JavaFX & SWT 2
R Java FX - Fxml - relative Größenangaben für Breite und Höhe einer TextArea AWT, Swing, JavaFX & SWT 8
U JavaFX Zeichenprogramm mit JavaFX FXML AWT, Swing, JavaFX & SWT 7
B Java FX FXML Textarea SceneBuilder als XML Editor AWT, Swing, JavaFX & SWT 1
C JavaFX Tiefgestellte Zeichen in fxml AWT, Swing, JavaFX & SWT 2
M Java FX SceneBuilder 2.0, FXML, Controller AWT, Swing, JavaFX & SWT 1
B FXML-Layoutdateien schützen AWT, Swing, JavaFX & SWT 4
7 JavaFX Verwendung einer ResizableCanvas-Klasse in fxml-Datei AWT, Swing, JavaFX & SWT 3
C JavaFX Auf Nodes einer FXML-Datei in start Methode zugreifen AWT, Swing, JavaFX & SWT 5
KrokoDiehl JavaFX Gleiche Controller-Instanz für inludiertes FXML AWT, Swing, JavaFX & SWT 1
I Scene Builder kann .fxml nicht mehr laden AWT, Swing, JavaFX & SWT 3
J JavaFX Zugriff auf FXML-Variablen eines anderen Controllers AWT, Swing, JavaFX & SWT 2
N JavaFX GUI Elemente einer anderen (FXML)Klasse ansprechen AWT, Swing, JavaFX & SWT 16
M JavaFX FXML Standartgröße festlegen AWT, Swing, JavaFX & SWT 5
L JavaFX Verständnisfrage zu JavaFX FXML und Controller-Klasse AWT, Swing, JavaFX & SWT 1
Z JavaFX Inhalt einer ViewTable durch Aktion einer Menubar ändern welche in einer anderen fxml ist AWT, Swing, JavaFX & SWT 4
wolfgang63 JavaFX Zugriff auf Guiobjekte die über FXML erstellt wurden AWT, Swing, JavaFX & SWT 2
D JavaFX @FXML Annotation mit Klassen und Instanzen verbinden? AWT, Swing, JavaFX & SWT 5
A Databinding in FXML-Datei AWT, Swing, JavaFX & SWT 1
K JavaFX Erzeugen dynamischer Layouts in fxml AWT, Swing, JavaFX & SWT 3
M JavaFX Stage in einer FXML-Controllerklasse ermitteln? AWT, Swing, JavaFX & SWT 5
G Swing, JavaFx - Felder aus FXML sind null AWT, Swing, JavaFX & SWT 6
M JavaFX Von FXML-Controllerdatei Daten zurückgeben AWT, Swing, JavaFX & SWT 6
M Komplexe Eingabenmasken in FXML definieren? AWT, Swing, JavaFX & SWT 17
M Java FX Innerhalb einem FXML-Dialog weiteren FXML-Dialog einblenden AWT, Swing, JavaFX & SWT 3
E JavaFX fxml files wechseln AWT, Swing, JavaFX & SWT 4
H Taschenrechnerprojekt in Javafx - Frage zu den Buttons in FXML AWT, Swing, JavaFX & SWT 1
T JavaFX FXMLController für mehrere FXML? AWT, Swing, JavaFX & SWT 7
M JavaFX Parameter für Custom Control in FXML übergeben? AWT, Swing, JavaFX & SWT 4
C JavaFX Fxml and stylecheets AWT, Swing, JavaFX & SWT 5
N FXML Dokument laden AWT, Swing, JavaFX & SWT 1
Tort-E JavaFX FXML Grundsatzfrage AWT, Swing, JavaFX & SWT 2
K Controls in Controls / Nested fxml AWT, Swing, JavaFX & SWT 1
D JavaFX Mysteriöser Dropshadow hinter Tablabelschrift - Schatten kann nicht entfernt werden (FXML + CSS) AWT, Swing, JavaFX & SWT 6
G JavaFX NullPointerException bei Zugriff auf FXML Element AWT, Swing, JavaFX & SWT 0
S JavaFX FXML AWT, Swing, JavaFX & SWT 3
G JavaFX Fxml AWT, Swing, JavaFX & SWT 2
K JavaFX Tableview mit fxml ohne Aktualiserung trotz Thread AWT, Swing, JavaFX & SWT 13
F JavaFX Auf FXML ImageView zugreifen AWT, Swing, JavaFX & SWT 6
S Aus XML Datei FXML generieren AWT, Swing, JavaFX & SWT 4
B JavaFX FXML - Eclipse einrichten AWT, Swing, JavaFX & SWT 2
V JavaFX - fxml-Datei laden (neben CSS) AWT, Swing, JavaFX & SWT 2
V Guis erstellen mit FXML und javaFX gemischt AWT, Swing, JavaFX & SWT 5
Juelin Für Java-Spezialisten AWT, Swing, JavaFX & SWT 4
Juelin Java <-> Delphi AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben