Custom Controls

Xanond

Mitglied
Hallo,
ich möchte ein von mir Erstelltes CustomControll so einbinden, so dass es quasi so funktioniert wie in C# ein userControll.
Ich habe mein CostumControll auch schon eingebunden, nur kann ich leider nicht auf die Methoden die im Controller für mein CostumContoll sind nicht zugreifen(werden nicht gefunden).
Mein CostumControll ist schon in meinem "Haupt" FXML vorhanden.
Hier mein Haupt FXML.
Code:
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.text.*?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="543.0" prefWidth="789.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="GUI.Festival_Bewerter_Startseite_FXMLController">
   <children>
      <Button layoutX="354.0" mnemonicParsing="false" prefHeight="34.0" prefWidth="81.0" text="Home" />
      <TabPane layoutX="-1.0" layoutY="34.0" prefHeight="509.0" prefWidth="789.0" tabClosingPolicy="UNAVAILABLE">
        <tabs>
          <Tab text="Home">
            <content>
              <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0">
                     <children>
                        <Button layoutX="110.0" layoutY="74.0" mnemonicParsing="false" prefHeight="100.0" prefWidth="185.0" text="Festival" />
                        <Button layoutX="494.0" layoutY="74.0" mnemonicParsing="false" prefHeight="100.0" prefWidth="185.0" text="Alle Festivals" />
                        <Button layoutX="110.0" layoutY="238.0" mnemonicParsing="false" prefHeight="100.0" prefWidth="185.0" text="Ziele" />
                        <Button layoutX="494.0" layoutY="238.0" mnemonicParsing="false" prefHeight="100.0" prefWidth="185.0" text="Festival Planer" />
                     </children></AnchorPane>
            </content>
          </Tab>
          <Tab text="Fetival Einzeln">
            <content>
              <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0">
                     <children>
                        <AnchorPane id="AnchorPane" layoutX="14.0" layoutY="14.0" prefHeight="449.0" prefWidth="765.0">
                           <children>
                              <Pane layoutX="62.0" layoutY="25.0" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0">
                                 <children>
                                    <Button layoutX="154.0" layoutY="108.0" mnemonicParsing="false" onAction="#doBtnClick" text="Button" />
                                 </children>
                              </Pane>
                           </children></AnchorPane>
                     </children></AnchorPane>
            </content>
          </Tab>
            <Tab text="Festival Gesamt">
              <content>
                <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
              </content>
            </Tab>
            <Tab text="Ziele">
              <content>
                <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
              </content>
            </Tab>
            <Tab text="Festival Planer">
              <content>
                <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
              </content>
            </Tab>
        </tabs>
      </TabPane>
   </children>
</Pane>
Mein children Element (das CustomControll) wir aber auch nicht aktuell zum eigentlichen Controll gemacht. Also wen ich einen Button Verschiebe wird dieser nicht autmatisch verschoben beim nächsten Start der Hauptanwendung, sondern ich muss das gesamte CostumControll nochmal neu reinziehen.
Hier der Code in meiner Hauptanwendung:
Code:
public class Festival_Bewerter_Startseite_FXMLController implements Initializable
{   
    @Override
    public void initialize(URL url, ResourceBundle rb)
    {
       
       
    }   
 
   
  
}

Und hier der Code meines CostumControllers:
Code:
public class CustomControl_FestivalController extends Application
{
   
   @Override
    public void start(Stage stage) throws Exception {
         Parent root = FXMLLoader.load(getClass().getResource("UserControlFestival.Costum Control_Festival"));
       
        Scene scene = new Scene(root);
       
        stage.setScene(scene);
        stage.show();
    }
   
  @FXML
    private void doBtnClick(ActionEvent event)
    {
        System.out.println("Basd");
    }
          
          
          
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
    }
Die oben aufgeführte doBtnClick methode wird eben nicht erkannt.
Im Anhang findet ihr wie mein Programm bisher aufgebaut ist.

Ich hoffe ich konnte alles wichtige mit einbringen, wenn nicht einfach schreiben ;)
Vielen dank schon mal für eure Hilfe!
 

Anhänge

  • Unbenannt.PNG
    Unbenannt.PNG
    11,6 KB · Aufrufe: 21

dzim

Top Contributor
Also als erstes - und bitte nimm es mir nicht krumm - aber der Code-Stil ist... So speziell...
pakages: Werden klein geschrieben und sind quasi wie umgekehrte URLs aufgebaut
<country-code>.<organisation>.<project/sub-org>[...].<app-specific-eg:"gui">
Ich weiss, das ist eine tiefe Schachtelung, aber so ist es üblich. Ich weiss auch, dass es in der C#-Welt etwas anders (daher sicher auch dein "GUI"-package).
Klassen: Es gibt zwar Projekte (hallo Spring...), die übertreiben völlig, was die Namen angeht, aber du stellst das in den Schatten! :)
Was empfehle ich? Benenn als erstes das FXML von "UserControlFestival.Costum Control_Festival" (ernsthaft!?) nach "UserControlFestival.fxml" um. Benenne die Controller Klasse dann schlicht "UserControlFestival" (da du ein wiederverwendbares Controll und nicht einfach ein Stück GUI willst, genügt dass, sonst würde ich es "UserControlFestivalController" nennen).
Custom Controls erweitern meist bestehende Layouts oder so. Schau dir bitte diese Anleitung von Oracle an:
http://docs.oracle.com/javase/8/jav...oc-files/introduction_to_fxml.html#fxmlloader
Hier wird im Detail das Vorgehen beschrieben.

Ich hoffe, das hilft dir etwas. Und wie gesagt: Nimm es mir nicht krumm, dass ich an deinem bisschen Code schon zu viel herum nörgele, aber wenn du Java Programmierst, dann nutze die Konventionen. Andere Entwickler werden es dir Danken.

Appendix:
Offiziele Code Conventions: http://www.oracle.com/technetwork/java/codeconvtoc-136057.html
Google's Code Conventions: https://google.github.io/styleguide/javaguide.html <- finde ich ganz nett!
 

Xanond

Mitglied
Kein ding ich bin grad noch relativ am Anfang aber danke für deine Antwort. Ich hab die namen etwas geändert und hab mir die Links von dir angesehen, nur klappt es immer noch nciht und ich hab den Überblick verloren.
Das hier wäre der code für mein Haupt FXML
Code:
 */
public class Startseite extends Application
{

    @Override
    public void start(Stage stage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("Startseite.fxml"));
       
        Scene scene = new Scene(root);
       
        stage.setScene(scene);
        stage.show();
    }

   
       public static void main(String[] args) {
        launch(args);
    }
   
}

und der hier für das userControl:
Code:
public class Festival extends start.Startseite
{

      public Festival()
    {
        FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("userControlFestival.Festival.fxml"));
        fxmlLoader.setRoot(this);
        fxmlLoader.setController(this);

        try
        {
            fxmlLoader.load();
        }
        catch (IOException exception)
        {
            throw new RuntimeException(exception);
        }
       
    }
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args)
    {
        launch(args);
    }
   
}
Ich weiß echt nicht mehr weiter, denke das es nur ein blöder Fehler ist aber ich kann nicht mehr.

Danke schon mal und wie gesagt die conventions werden gemacht sobald das hier funktioniert. Aber auch danke dafür :)
Hättest du noch nen Tipp um mein Problem zu lösen?
 

dzim

Top Contributor
Das Problem ist, dass du versuchst, die Klasse "Startseite" noch weiter zu erweitern. In JavaFX wird genau eine Application gestartet ("Startseite"). Dort lädst du dein (sozusagen "Root"-)UI, das ggf. noch kleinere Teile seiner Oberfläche Anhand von FXML oder Code erstellt.
Neue Fenster werden über die Dialog-API oder einer neuen Stage erstellt, aber es wird keine weitere Application geben. Was musst du nun machen?
Deine "Festival"-GUI sollte von einem Layout (HBox, VBox, Pane, ...) erben. An anderer Stelle dann kannst du das Control dann in deine UI integrieren.
Willst du mit "Festival" jedoch explizit ein neues Fenster öffnen, dann suche nur nach "javafx open new windows" und du wirst mit StackOverflow-Posts, die genau das fragen, geradezu erschlagen. (IMHO die besten Antworten in Bezug auf JavaFX kommen dort von den Usern James_D und jewelsea.)
 

Xanond

Mitglied
Hi sry, dass ich nochmal nerve. Ich hab mein Festival jetzt von Anchor Pane erben lassen und einbinden lässt es sich ja auch. Aber wenn ich im Festival fxml z.B. einen Button nach wo anders verschiebe, aktualisiert er diese Verschiebung nicht im Haupt fxml indem es ja eingebunden wäre.

PS: Fals es dir was hilft ich habe immer noch die klassische Aufteilung mit xml datei und zwei jars (eine normale Festival.jar und einen Controler(Festival_Controller)
 

dzim

Top Contributor
Zwei Jars? Verstehe ich jetzt nicht. Meinst du nicht eher zwei Klassen? Und ohne Code kann ich absolut null Aussagen machen, was es sein könnte...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Splayfer Custom Font in AttributedString Java AWT, Swing, JavaFX & SWT 4
M4cM4rco0707 JavaFX Custom-Komponente mit Custom-Controller AWT, Swing, JavaFX & SWT 3
S JavaFX Java Custom Node Grafik zurückgeben AWT, Swing, JavaFX & SWT 2
F JavaFX Custom Exceptions AWT, Swing, JavaFX & SWT 5
Yjuq JavaFX Custom Control - Image resize AWT, Swing, JavaFX & SWT 0
D Gluon Scene Builder Custom AWT, Swing, JavaFX & SWT 0
B JavaFX Custom TextInputControl AWT, Swing, JavaFX & SWT 1
T Custom Window ohne Swing / AWT / FX..?! AWT, Swing, JavaFX & SWT 1
F JavaFX Custom ListView erstellt ghost Element AWT, Swing, JavaFX & SWT 3
T JavaFX Custom Layout AWT, Swing, JavaFX & SWT 5
L JavaFX Custom control mit Hover Effekt AWT, Swing, JavaFX & SWT 2
M Swing JColorchooser anpassen - custom style? AWT, Swing, JavaFX & SWT 0
M JavaFX Parameter für Custom Control in FXML übergeben? AWT, Swing, JavaFX & SWT 4
B Custom JTabbedPane-Tab-Design AWT, Swing, JavaFX & SWT 2
N JLabel HTML mit custom Font AWT, Swing, JavaFX & SWT 0
P Verbuggte custom JButton unter Windows AWT, Swing, JavaFX & SWT 9
G TitledPane Custom Title AWT, Swing, JavaFX & SWT 6
N Custom JButton Feld aus Parent lesen lassen AWT, Swing, JavaFX & SWT 11
V Swing Custom JToggleButton in JTable - Click-Event geht erst beim zweiten Mal AWT, Swing, JavaFX & SWT 7
lumo SWT JFace Databinding +Custom Table AWT, Swing, JavaFX & SWT 2
B Swing JTable custom ColumnModel Problem AWT, Swing, JavaFX & SWT 5
W Swing Tag Oder Custom Eintrag AWT, Swing, JavaFX & SWT 7
algorismi Custom JDesktopIcon AWT, Swing, JavaFX & SWT 5
hdi Custom Cursor: Problem mit Größe AWT, Swing, JavaFX & SWT 5
N JComboBox mit Custom Object AWT, Swing, JavaFX & SWT 2
V Frage zu JScrollPane mit Custom Headern, mit Beispiel AWT, Swing, JavaFX & SWT 2
S [S] custom tree componente AWT, Swing, JavaFX & SWT 8
Z MessageDialog mit Custom panel erstellen AWT, Swing, JavaFX & SWT 2
M Error occurred during initialization of boot layer java.lang.module.FindException: Module javafx.controls not found AWT, Swing, JavaFX & SWT 14
J JavaFX Controls AWT, Swing, JavaFX & SWT 4
L JavaFX Eigene JavaFX Controls anlegen AWT, Swing, JavaFX & SWT 1
wolfgang63 JavaFX Controls in einer BorderPane funktionieren nicht AWT, Swing, JavaFX & SWT 4
L Zugriff auf JavaFX Controls AWT, Swing, JavaFX & SWT 3
K Controls in Controls / Nested fxml AWT, Swing, JavaFX & SWT 1
N Swing Dynamische Controls AWT, Swing, JavaFX & SWT 5
A Swing Suche Listener für beliebige Änderung an GUI Items/Controls AWT, Swing, JavaFX & SWT 8
I Probleme mit GWT Controls unter Firefox AWT, Swing, JavaFX & SWT 14
T SWT/Eclipse Form Controls zur Laufzeit hinzufügen,GridLayout AWT, Swing, JavaFX & SWT 4
T Controls eines Formulars durchlaufen AWT, Swing, JavaFX & SWT 14
E JTable und Controls AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen


Oben