NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: JavaFX - volani metody v promenne controlleru, ne v controlleru

V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Vojta Bereščák:20.2.2017 15:07

Zdravim,
mam problem a nevim jak na nej. Pracuji s SceneBuilderem a potrebuji pri stisku tlacitka volat metodu, ktera neni primo v samotnem controlleru ale ktera je v promenne toho controlleru.
Konkretneji. Budu mit v controlleru nekolik tabulek, jejich sloupcu a tlacitek pro pridavani a odebirani radku. Tudiz nechci mit controller plnej promennych ktere predstavuji sloupce a metod ktere predstavuji akce tlacitek. Udelal jsem si tedy tridu:

public class PersonTable extends TableView<Person> {

        @FXML
        private TableColumn<Person, String> firstNameColumn;

        @FXML
        private TableColumn<Person, String> lastNameColumn;

        public void initialize() {
                firstNameColumn.setCellValueFactory(cellData -> new SimpleStringProperty(cellData.getValue().getFirstName()));
                lastNameColumn.setCellValueFactory(cellData -> new SimpleStringProperty(cellData.getValue().getLastName()));
        }

        @FXML
        public void removeRow() {
           ....
        }

       ...

}

a v controller vypada takto

public class MainWindowController {
        @FXML
        private PersonTable personTable;

        public void initialize() {
                        personTable.initialize();
        }

}

a potrebuji v SceneBuilderu nastavit na tlacitko neco jako toto:
On action
personTable.re­moveRow()

a treba u jednoho sloupce
personTable.fir­stNameColumn

jde to nejak udelat?

Dekuji

 
Odpovědět
20.2.2017 15:07
Avatar
Odpovídá na Vojta Bereščák
Petr Štechmüller:20.2.2017 15:34

Tudiz nechci mit controller plnej promennych ktere predstavuji sloupce a metod ktere predstavuji akce tlacitek.

Od toho ten kontroler je. Když už jsi si to udělal takhle, tak tu tabulku můžeš nechat v samostatné třídě, jen jí dodělej metody pro přidávání a odebírání řádku. Metody které představují akce tlačítek jinam než do kontroleru nedáš.

Nahoru Odpovědět
20.2.2017 15:34
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Vojta Bereščák:20.2.2017 16:17

Vychazel jsem z toho jak se to dela treba v JSF. Tam muzu pomoci teckove notace vstupovat niz a niz v controlleru. tzn muze se skladat z mnoha subcontrolleru. A nebo v XCode (ObjC) muzu dane komponente rict ze ci je instanci a pak pristupovat k jejim metodam. Nicmene pokud to nejde udelam to tak ze budu mit jeden hlavni controller a pak do nej budu vkladat panely z jinejch .fxml ktery budou mit vlastni controllery.

 
Nahoru Odpovědět
20.2.2017 16:17
Avatar
Odpovídá na Vojta Bereščák
Petr Štechmüller:20.2.2017 17:06

Skládání layoutu pomocí různých view a kontroléru samozřejmě je možné.
Ve FXML se na to používá direktiva include

fx:include="anotherView.fxml"
Nahoru Odpovědět
20.2.2017 17:06
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Vojta Bereščák:20.2.2017 17:56

Dekuji tohle vypada velice dobre. Jen dotaz k tomu includu. Mam nejakou sanci se z nadrazeneho controlleru dostat k instanci classy ktera ridi includnute fxml. Nyni to delam tak, ze to vkladam programove a pritom si z loaderu taham i controller.

 
Nahoru Odpovědět
20.2.2017 17:56
Avatar
Petr Štechmüller:20.2.2017 19:56

Jo, to není problém. Ten include napíšeš takto:

<fx:include fx:id="customId" source="another_view.fxml">

a v rodičovském kontroleru získáš instanci includovaného kontroleru takto:

@FXML
AnotherControllerClass customIdController;

Je velmi důležité, aby jsi dodržel název proměnný customIdContro­ller. Název se musí skládat z fx:id který jsi definoval ve FXML a dále musí na konci obsahovat slovo Controller. Pak se to úspěšně propojí a získáš tak referenci na vkládaný kontroler.

Používej tlačítko odpovědět.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
20.2.2017 19:56
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Odpovídá na Petr Štechmüller
Vojta Bereščák:20.2.2017 21:32

Super tohle presne potrebuju. Dik

 
Nahoru Odpovědět
20.2.2017 21:32
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 7 zpráv z 7.