Geek tričko zdarma Python týden
Tričko zdarma! Stačí před dobitím bodů použít kód TRIKO15. Více informací zde
Pouze tento sleva až 80% na kurzy Python

Lekce 3 - Jednoduchá kalkulačka v JavaFX

Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem.
Vydávání, hosting a aktualizace umožňují jeho sponzoři.

V minulé lekci, FXML a první formulářová aplikace v JavaFX, jsme si vysvětlili standardní HelloWorld projekt v NetBeans. Dnes si v Java tutoriálu vytvoříme svou první vlastní aplikaci v JavaFX, bude to jednoduchá kalkulačka.

Založte si nový projekt s názvem KalkulackaFX. Rovnou si ukažme, jak bude naše výsledná aplikace vypadat:

Kalkulačka v JavaFX

Návrh formuláře

Aplikaci započneme návrhem formuláře. Otevřeme FXMLDocument.fxml v JavaFX Scene Builderu a z formuláře odstraníme Button a Label.

Na prázdný formulář natahneme následující komponenty z Library.

TextField

Jak asi tušíte, TextField slouží k zadávání textu. My ho využijeme i k zadání čísel. Na formulář ho vložíme 2x.

ComboBox

ComboBox je rozbalovací nabídka, která nám umožňuje vybrat z několika předdefinovaných hodnot. Nám poslouží k výběru početní operace (sčítání, odčítání, násobení, dělení).

Label

Textové popisky budeme potřebovat dva. Jeden pro znak "rovná se" a druhý pro výsledek, který kalkulačka vypočítala. Labelům v Properties nastavte text na "=" a "0".

Button

Na formulář vložíme poslední komponentu, kterou bude tlačítko. Nastavíme mu text na "Vypočítej".

Provázání kontroleru a FXML

Přesuneme se do java kontroleru. V kódu budeme potřebovat načíst hodnoty z textových polí a vybranou položku z ComboBoxu. Také budeme potřebovat vypsat výsledek do labelu a reagovat na kliknutí na tlačítko. Z toho vyplývá, že v kontroleru potřebujeme s těmito komponentami pracovat. Založíme si pro ně ve třídě tedy atributy s anotací @FXML. Anotace musí být opravdu nad každým atributem. Zároveň si ve třídě připravíme obslužnou metodu pro naše tlačítko. Třída kontroleru bude vypadat asi takto:

public class FXMLDocumentController implements Initializable {

    @FXML
    private TextField cislo1TextField;
    @FXML
    private TextField cislo2TextField;
    @FXML
    private ComboBox operaceComboBox;
    @FXML
    private Button vypocitejButton;
    @FXML
    private Label vysledekLabel;

        @FXML
    private void handleVypocitejButtonAction(ActionEvent event) {
        }

        @Override
    public void initialize(URL url, ResourceBundle rb) {
    }

}

Původní label a tlačítko s obslužnou metodou jsme ze třídy odstranili. Kód si v NetBeans uložte a přesuňte se do JavaFX Scene Builderu. Jednotlivým komponentám na formuláři přiřadíme jejich fx:id podle toho, jak jsme si pojmenovali atributy v kontroleru. Celkem tedy přiřadíme 5 fx:id. U tlačítka nesmíme zapomenout přiřadit i obslužnou metodu.

Formulář kalkulačky v JavaFX Scene Builderu

JavaFX Scene Builder pracuje s java kódem kontroleru. Pokud zadáme název neexistujícího atributu, upozorní nás na to chybovou hláškou. Javovský kód samozřejmě musí být uložený, jinak to nemá šanci poznat. To je bohužel nevýhoda toho, že se aplikace tvoří ve dvou různých nástrojích.

Obsluha formuláře

Konečně máme vše připraveno k tomu, abychom se mohli věnovat samotné obsluze formuláře.

Naplnění ComboBoxu

Jako první budeme potřebovat nějaké položky do ComboBoxu. Proto upravíme inicializační metodu kontroleru do následující podoby:

@Override
public void initialize(URL url, ResourceBundle rb) {
        ObservableList<String> operace = FXCollections.observableArrayList("+", "-", "*", "/");
        operaceComboBox.setItems(operace);
        operaceComboBox.getSelectionModel().selectFirst();
}

Nejprve vytvoříme kolekci položek. V JavaFX se pracuje s tzv. observable collections, což by se dalo přeložit jako pozorovatelné kolekce. Jakmile použijeme ObservableArrayList a nastavíme ho jako zdroj dat nějaké komponentě formuláře, tato komponenta si svůj obsah sama aktualizuje podle toho, jak se kolekce mění. Tomuto chování se někdy říká binding a ušetří nám spoustu starostí a kódu, který bychom jinak museli pro obnovování formulářů napsat. V našem případě sice položky měnit nebudeme, nicméně komponenty v JavaFX jsou implementované tak, že pracují s observable kolekcemi. Ještě dodám, že se kolekce vytvářejí pomocí továrních (statických) metod na třídě FXCollections.

Nastavení položek pomocí metody setItems() je triviální. Aby byla po spuštění aplikace hned vybraná první položka (sčítání), musíme si získat tzv. selectionModel(), který se stará o vybrané položky a na tom vybranou položku nastavit.

Obsluha tlačítka

Zbývá již jen naprogramovat obslužnou metodu tlačítka. Její kód bude následující:

@FXML
private void handleVypocitejButtonAction(ActionEvent event) {
        double cislo1 = Double.parseDouble(cislo1TextField.getText());
        double cislo2 = Double.parseDouble(cislo2TextField.getText());
        String operace = (String)operaceComboBox.getSelectionModel().getSelectedItem();
        double vysledek = 0;
        switch (operace)
        {
                case "+":
                        vysledek = cislo1 + cislo2;
                        break;
                case "-":
                        vysledek = cislo1 - cislo2;
                        break;
                case "*":
                        vysledek = cislo1 * cislo2;
                        break;
                case "/":
                        if (cislo2 != 0)
                        vysledek = cislo1 / cislo2;
                        break;
        }
        vysledekLabel.setText(String.valueOf(vysledek));
}

Jako první si naparsujeme čísla z obou TextFieldů. Text získáme metodou getText(), vyjímky při parsování pro zjednodušení nebudeme ošetřovat.

Získání vybrané operace provedeme opět přes SelectionModel, přes metodu getSelectedItem(), která vrací vybranou položku v ComboBoxu. Položku musíme přetypovat na String. Podobně bychom mohli využít metodu getSelectedIndex(), která vrátí číselný index vybrané položky. Získávání přímo objektů je však velmi praktické, v ComboBoxu totiž můžeme mít v pokročilejších aplikacích např. instance uživatelů. Vše si během seriálu ukážeme.

Následuje switch, který podle operace vypočítá výsledek. Všimněte si ošetření dělení nulou. Ideálně bychom při dělení nulou měli zobrazit nějakou chybovou hlášku. JavaFX bohužel zatím tuto funkcionalitu stále neobsahuje a musí se obcházet, což si ukážeme v dalších dílech seriálu.

Již nezbývá nic jiného, než nastavit výsledek příslušnému labelu. Samozřejmě ho musíme nejprve převést na String. Můžeme se těšit z hotové aplikace.

Distribuce

Na závěr si řekněme, jak aplikaci šířit. V NetBeans je vedle tlačítka Play tlačítko Clean and Build Project (shift + F11). Po jeho stisknutí se ve složce s vaším projektem vytvoří složka dist a v ní spustitelný JAR s vaší aplikací. Můžete ji poslat známým a pochlubit se. Dokonce je tam i vygenerovaná HTML stránka, kde je vaše kalkulačka jako applet. Můžete si ji dát i na svůj web.

Webová aplikace v JavaFX

V příští lekci, Upomínač narozenin v JavaFX - Návrh formuláře, začneme programovat upomínač narozenin přátel. Bude se jednat o praktickou a středně pokročilou aplikaci, na které se naučíme spoustu zajímavých technik. Zdrojový kód dnešního projektu je ke stažení níže pro případ, že by vám něco nefungovalo.


 

Stáhnout

Staženo 1546x (165.25 kB)
Aplikace je včetně zdrojových kódů v jazyce java

 

 

Článek pro vás napsal David Čápka
Avatar
Jak se ti líbí článek?
19 hlasů
Autor pracuje jako softwarový architekt a pedagog na projektu ITnetwork.cz (a jeho zahraničních verzích). Velmi si váží svobody podnikání v naší zemi a věří, že když se člověk neštítí práce, tak dokáže úplně cokoli.
Unicorn College Autor sítě se informační technologie naučil na Unicorn College - prestižní soukromé vysoké škole IT a ekonomie.
Předchozí článek
FXML a první formulářová aplikace v JavaFX
Všechny články v sekci
Okenní aplikace v Java FX
Miniatura
Následující článek
Upomínač narozenin v JavaFX - Návrh formuláře
Aktivity (2)

 

 

Komentáře

Avatar
BLADE
Člen
Avatar
BLADE:22.3.2014 15:13

Veľmi sa mi páči že sa to dá spúšťať cez HTML, no mám 2 otázky :

  1. Dá sa takto spustiť aj obyčajný SWING projekt ?
  2. Keď som chcel spustiť tento projekt mozilla mi ho zablokovala a po pol hodinovom boji som to nakoniec spustil takže som musel ísť do ovládacieho panelu Java a zmeniť security na medium. To sa mi zdá zložité , ako by sa to dalo normálne ešte spustiť ?

Inak znova perfektný tutorial , asi sa začnem toto učiť keďže swing je oproti FX naozaj zastaralí, no teraz na to nemám moc čas keďže maturujem , mohli by ste do vtedy ešte pridať pár tutorialov :D.

 
Odpovědět 22.3.2014 15:13
Avatar
byzanth25
Člen
Avatar
byzanth25:22.3.2014 16:55

Ako priradim FXML suboru controler? Na screenoch starsieho scene buildera bola nato kolonka v Code. Ale v novej tam nieje

 
Odpovědět 22.3.2014 16:55
Avatar
lazenska.wewerka:28.3.2014 15:50

Zdravím. V článku se nepíše, že v FMXLDocumentCon­troller si musim každou komponentu nejdřív naimportovat, jinak jsou v atributech podtrženy červeně a java hlásí "cannot find symbol".. Nebo dělám něco blbě?
Díky

 
Odpovědět 28.3.2014 15:50
Avatar
ucenidolazni
Člen
Avatar
ucenidolazni:23.4.2014 18:12

Prosím Vás, funguje mi výpočet, ale pokud zvolím nějakou operaci tak se výpočet provede ale neukáže se v tom samotném Comboboxu. Předem díky, jinak opět super tutorialek !

 
Odpovědět 23.4.2014 18:12
Avatar
ucenidolazni
Člen
Avatar
Odpovídá na ucenidolazni
ucenidolazni:23.4.2014 18:22

Měl jsem malou šířku comboboxu

 
Odpovědět  +1 23.4.2014 18:22
Avatar
nasgol
Člen
Avatar
Odpovídá na byzanth25
nasgol:23.6.2014 10:30

Ve SceneBuilderu (dále SB) si vyber graficky nejvyšší prvek - AnchorPane. Poté v levém meníčku (pod Hierarchy) vyber Controller nabídku a přiřaď příslušný controller, pak ti to bude i automaticky nabízet u vlastnosti fx:id u graf. položek, příslušný parametry z tvé třídy *controller.java

Já teda používám Eclipse a musím mít třídu *controller.java uloženou ve stejné složce jako *.fxml soubor, aby mi to automaticky nabídlo jaký controller vybrat

 
Odpovědět 23.6.2014 10:30
Avatar
byzanth25
Člen
Avatar
Odpovídá na nasgol
byzanth25:23.6.2014 10:35

v ktorom menu to je? Properties, Layout, Code? Ani v jednom to nemam... SB mam 2.0

 
Odpovědět 23.6.2014 10:35
Avatar
nasgol
Člen
Avatar
Odpovídá na byzanth25
nasgol:23.6.2014 11:41

Ok, tady máš screen, kde se nachází to přiřazení controll class k *.fxml (formuláři): https://dl.dropboxusercontent.com/…sy_money.jpg

PS: taky mám Buildera 2.0

Editováno 23.6.2014 11:42
 
Odpovědět 23.6.2014 11:41
Avatar
byzanth25
Člen
Avatar
byzanth25:23.6.2014 15:06

Ahaaa. Dakujem ja som to furt hladal na pravo..:D som tlk...:D

 
Odpovědět 23.6.2014 15:06
Avatar
-snaživec-
Člen
Avatar
-snaživec-:28.9.2014 17:33

Taká malá otázka: čo mám naimportovať?

Odpovědět 28.9.2014 17:33
Pomali ďalej zájdeš.
Avatar
-snaživec-
Člen
Avatar
Odpovídá na -snaživec-
-snaživec-:28.9.2014 17:37

Už netreba už viem:
javafx.collec­tions.FXCollec­tions
javafx.colecti­ons.Observable­List

Odpovědět 28.9.2014 17:37
Pomali ďalej zájdeš.
Avatar
Chnapik2
Člen
Avatar
Chnapik2:27.12.2014 20:01

Čau, mám úplně shodný kód jako je v souborech na stažení, ale když spustím stažený projekt, tak je vše ok, ale když spustím svůj kód, tak mi to háže chyby. Nevíte někdo co s tím?

Executing /home/matej/Dropbox/Java/KalkulackaFX/dist/run293077331/KalkulackaFX.jar using platform /usr/lib/jvm/java-8-oracle/jre/bin/java
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:363)
        at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:303)
        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:875)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$147(LauncherImpl.java:157)
        at com.sun.javafx.application.LauncherImpl$$Lambda$53/200006406.run(Unknown Source)
        at java.lang.Thread.run(Thread.java:745)
Caused by: javafx.fxml.LoadException:
file:/home/matej/Dropbox/Java/KalkulackaFX/dist/run293077331/KalkulackaFX.jar!/kalkulackafx/FXMLDocument.fxml

        at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2595)
        at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2573)
        at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2435)
        at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3208)
        at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3169)
        at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3142)
        at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3118)
        at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3098)
        at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3091)
        at kalkulackafx.KalkulackaFX.start(KalkulackaFX.java:23)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$153(LauncherImpl.java:821)
        at com.sun.javafx.application.LauncherImpl$$Lambda$56/862637976.run(Unknown Source)
        at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$166(PlatformImpl.java:323)
        at com.sun.javafx.application.PlatformImpl$$Lambda$50/1768305536.run(Unknown Source)
        at com.sun.javafx.application.PlatformImpl.lambda$null$164(PlatformImpl.java:292)
        at com.sun.javafx.application.PlatformImpl$$Lambda$52/1372779.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at com.sun.javafx.application.PlatformImpl.lambda$runLater$165(PlatformImpl.java:291)
        at com.sun.javafx.application.PlatformImpl$$Lambda$51/1146743572.run(Unknown Source)
        at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
        at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
        at com.sun.glass.ui.gtk.GtkApplication.lambda$null$45(GtkApplication.java:126)
        at com.sun.glass.ui.gtk.GtkApplication$$Lambda$42/379110473.run(Unknown Source)
        ... 1 more
Caused by: java.lang.NullPointerException
        at kalkulackafx.FXMLDocumentController.initialize(FXMLDocumentController.java:62)
        at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2542)
        ... 22 more
Exception running application kalkulackafx.KalkulackaFX
Java Result: 1
Odpovědět  +1 27.12.2014 20:01
Co můžeš odložit na zítřek, nedělej dnes.
Avatar
mara
Člen
Avatar
mara:18.1.2015 18:06

Chtěl bych se zeptat, jestli to je jenom u mě. V návrháři vypadá vždy aplikace jinak než potom když ji spustím. Tady posílám, jak je to u mě v návrháři a jak mimo něj.
Děkuji

Odpovědět 18.1.2015 18:06
Co na srdci, to na Facebooku
Avatar
Hartrik
Redaktor
Avatar
Odpovídá na mara
Hartrik:19.1.2015 15:59

Protože od JavaFX 8 existují 2 vzhledy - caspian (2. obrázek) a modena (1. obrázek). Nově přidaná modena je nyní nastavená jako výchozí.

 
Odpovědět 19.1.2015 15:59
Avatar
mara
Člen
Avatar
Odpovídá na Hartrik
mara:20.1.2015 19:17

aha dobře děkuji :)

Odpovědět 20.1.2015 19:17
Co na srdci, to na Facebooku
Avatar
Jozef
Člen
Avatar
Jozef:23.6.2015 16:28

Pri pokuse otvoriť HTML odkaz mi aj po nastavení bezpečnosti v Jave vyhadzuje chybu-aj pri stiahnutom kóde- Runtime Error.

java.lang.NullPointerException: Location is required.
at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
        .....(tak to pokračuje ešte dlho)
Editováno 23.6.2015 16:28
Odpovědět 23.6.2015 16:28
I'm not afraid to die on a treadmill
Avatar
Petr Štechmüller
Překladatel
Avatar
Odpovídá na Jozef
Petr Štechmüller:23.6.2015 17:18

Location is required - to znamená, že máš špatnou cestu ke zdrojovému FXML souboru.

Odpovědět 23.6.2015 17:18
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Jozef
Člen
Avatar
Odpovídá na Petr Štechmüller
Jozef:23.6.2015 20:04

A ako sa to dá upraviť, aby to išlo spustiť cez ten HTML odkaz? Predpokladám teda, že tá chyba bude tu:

Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));

Pričom cesta k tomuto súboru je nasledovná:
C:/Users/Jozef/Drop­box/Java/Kalku­lacka/src/kal­kulackafx/

Odpovědět 23.6.2015 20:04
I'm not afraid to die on a treadmill
Avatar
Jarda_ugu
Člen
Avatar
Jarda_ugu:7.8.2015 10:14

Podařilo se mi vytvořit JAR, ale když ho spustím, dostanu hlášku:
This application requires a newer version of the Java runtime. Please download and install the latest Java runtime from java.com. Then restart the application.

Pro jiné aplikace potřebuji mít Java 6 a nechci instalovat poslední Javu. Je to možné zkompilovat pro starší Javu?

Jinak super tutorial, díky za něj.

 
Odpovědět 7.8.2015 10:14
Avatar
Roman
Člen
Avatar
Odpovídá na Chnapik2
Roman:31.8.2015 18:22

Bol som na tom rovnako ... môj problém spočíval v tom že som v JavaFX Scene Builder zabudol priradiť každému komponentu jeho fx:id a zároveň si to uložiť a prišiel som na to až na konci projektu ... potom sa mi z nejakého neznámeho dôvodu môj FXMLDocument nedal uložiť vždy mi písalo nejaké chyby tak som začal projekt od začiatku a zároveň si to všetko ukladal po každom kroku a bolo to OK :)

 
Odpovědět 31.8.2015 18:22
Avatar
vaclav.konecny:17.9.2015 20:21

Mam dva dotazi.

  1. podařilo se někomu sputit ten applet v ubuntu ( podle stranek oraclu neni podpora pro Linux)
  2. podařilo se někomu spustit .jar sobor ? opět pod buntu ?

jsem na rozpacich jestli opravdu všechny javaFX programu nefunguji na Linuxu nebo jak to vlastně je.

 
Odpovědět 17.9.2015 20:21
Avatar
Richard H.
Redaktor
Avatar
Odpovídá na Jarda_ugu
Richard H.:24.11.2015 18:50

Jinak jiný způsob než updatovat Javu nejde. V JRE 6 ještě FX vůbec není.

Odpovědět 24.11.2015 18:50
Malý užitečný manuál je vždy lepší než bichle k ničemu.
Avatar
Marián
Člen
Avatar
Marián:3.12.2015 16:23

Dlho som rozmýšľal ako naplniť combobox s hodnotami medzi napr. 1900 až 1995 a nakoniec som sa rozhodol pre nasledujúce riešenie:

String [] s = new String[96];
        for (int i = 0; i < 96; i++){
            switch(i)
            {
                case 0:
                    s [i]="190"+Integer.toString(i);
                    break;
                case 1:
                    s [i]="190"+Integer.toString(i);
                    break;
                case 2:
                    s [i]="190"+Integer.toString(i);
                    break;
                case 3:
                    s [i]="190"+Integer.toString(i);
                    break;
                case 4:
                    s [i]="190"+Integer.toString(i);
                    break;
                case 5:
                    s [i]="190"+Integer.toString(i);
                    break;
                case 6:
                    s [i]="190"+Integer.toString(i);
                    break;
                case 7:
                    s [i]="190"+Integer.toString(i);
                    break;
                case 8:
                    s [i]="190"+Integer.toString(i);
                    break;
                case 9:
                    s [i]="190"+Integer.toString(i);
                    break;
                default:
                    s [i]="19"+Integer.toString(i);
            }
                ObservableList <String> Year = FXCollections.observableArrayList(s);
                BirthYear.setItems(Year);
                BirthYear.getSelectionModel().selectFirst();
}

Neviem, či je to najlepšie alebo najrýchlejšie riešenie, lebo na moju vec mi to postačovalo.
Ale stále rozmýšľam nad tým, či by to nešlo ešte jednoduchšie a rýchlejšie :D

 
Odpovědět 3.12.2015 16:23
Avatar
David Novák
Redaktor
Avatar
Odpovídá na Marián
David Novák:3.12.2015 16:43

Co třeba?

String [] s = new String[96];
        for (int i = 0; i < 96; i++){
            s [i] = Integer.toString(1900+i);
}
Odpovědět  +3 3.12.2015 16:43
Chyba je mezi klávesnicí a židlí.
Avatar
Marián
Člen
Avatar
Odpovídá na David Novák
Marián:3.12.2015 18:04

No som ja blb. :) Nieco podobne som skusal. Ale zistil som to az teraz, ked si to sem napisal. Ale mal som preklep a preto mi to nefungovalo. Asi som bol slepy, ked som to nevidel. :)

 
Odpovědět 3.12.2015 18:04
Avatar
Erik Palenčík:3.1.2016 11:30

Mne nechce otvoriť prehliadač ten webovy subor, Maxthon pritom sekne, internet explorer mi ukaže poruchu, že mam priliš vysolu java security, ktora to nechce dovoliť a chrome nechce nájsť cestu (ale to asi kôli diakritike v mojom mene, ktoré je súčasťou cesty) :( :D

 
Odpovědět 3.1.2016 11:30
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na Erik Palenčík
vajkuba1234:3.1.2016 16:05

Založ si téma ve fóru. Tam máš jistější odpověď.

Odpovědět 3.1.2016 16:05
No hope, no future, JUST WAR! For world peace Israel must be DESTROYED!
Avatar
Štěpán Zechovský:20.3.2016 10:17

Ahoj, rozhodl jsem se rozšířit kalkulačku o funkci ANS, která ji po kliknutí na Button ANS dosadí výsledek do textového pole číslo1. V controlleru jsem vytvořil nový Button:

private Button nactiANS;

a vytvořil jsem metodu

 void handleNactiANSAction (ActionEvent ANS) {
}

V Java FX jsem vytvořil Button a propojení akcí s metodou po vzoru buttonu "Vypočítej".

Bohužel mě nenapadá způsob, jakým předat data z label výsledek do textového pole "číslo1".
Díky za pomoc s návrhem:-)

 
Odpovědět 20.3.2016 10:17
Avatar
Marián
Člen
Avatar
Odpovídá na Štěpán Zechovský
Marián:22.3.2016 9:45

Odovzdanie textu z label do textfield (Vysledok je label a cislo1 je textfield):

cislo1.setText(vysledek.getText());
Editováno 22.3.2016 9:46
 
Odpovědět 22.3.2016 9:45
Avatar
Michal Huff
Člen
Avatar
Odpovídá na Erik Palenčík
Michal Huff:31.3.2016 14:06

Jdi do Start > Programy > Java > Configure Java > zalozka Secturity > Exception Site List > Edit Site List > Add. Napis file:/// a ono ti to da vyjimku pro vsechny soubory na pocitaci

 
Odpovědět 31.3.2016 14:06
Avatar
 
Odpovědět 3.4.2016 13:54
Avatar
Jan Mach
Člen
Avatar
Jan Mach:13.8.2016 20:39

Když udělám soubor html, jak ho mám spustit v Chromu? Tady je screenshot z Chromu, ale mě to pořád chce, abych nainstaloval Javu, ale to nepomůže.

 
Odpovědět 13.8.2016 20:39
Avatar
Nezmar Hydra
Člen
Avatar
Odpovídá na vaclav.konecny
Nezmar Hydra:27.8.2016 15:09

sudo chmod a+x soubor.jar
nastaví jako spustitelný a pak jen kliknout

 
Odpovědět 27.8.2016 15:09
Avatar
Kakal Kakal
Člen
Avatar
Kakal Kakal:30.9.2016 15:06

nejde mi to

 
Odpovědět  -1 30.9.2016 15:06
Avatar
mkub
Redaktor
Avatar
Odpovídá na Kakal Kakal
mkub:1.10.2016 17:05

kristalova gula sa nam rozbila

 
Odpovědět  +6 1.10.2016 17:05
Avatar
David J.
Člen
Avatar
David J.:14.9.2017 22:40

Zdravím. Mám takový menší problém s kalkulačkou. Používám prostředí InteliJ IDEA a vše funguje až na @Override
public void initialize(URL url, ResourceBundle rb) {...
kdy kompilátor vyhodí chybu "Error:(66, 5) java: method does not override or implement a method from a supertype". Nevíte prosím někdo co s tím?

 
Odpovědět 14.9.2017 22:40
Avatar
Atrament
Člen
Avatar
Odpovídá na David J.
Atrament:15.9.2017 9:06

Nechybí ti tam 'implements Initializable'?

public class FXMLDocumentController implements Initializable {
...
 
Odpovědět 15.9.2017 9:06
Avatar
David J.
Člen
Avatar
Odpovídá na Atrament
David J.:15.9.2017 16:15

Ano problém byl opravdu v chybějícím "implements Initializable". Mockrát děkuju za pomoc.

 
Odpovědět 15.9.2017 16:15
Avatar
Filip (animátor/programator):24.9.2017 13:39

Ja scene builder nemám ale aj tak sa mi to podarilo dokončiť cez kód v FXMLDocument.FXML a funguje to!!!!

Odpovědět 24.9.2017 13:39
Nikdy sa nevzdávaj a choď si za svojim snom.......
Avatar
Odpovědět 24.9.2017 13:46
Nikdy sa nevzdávaj a choď si za svojim snom.......
Avatar
Petr Štechmüller
Překladatel
Avatar
Odpovídá na Filip (animátor/programator)
Petr Štechmüller:24.9.2017 13:47

Gratuluji.
btw. scene builder není podmínkou funkčnosti. Já si všechny FXML dokumenty píšu ručně.

Odpovědět  +1 24.9.2017 13:47
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Feri Laky
Člen
Avatar
Feri Laky:5.11.2017 20:08

Těším se z hotové aplikace - nemám žádné červené, nebo žltočervené kuličky, i když jsem dost věcí musel dopsat v Controlleru, koré tam v originálu nebyly - a teď spustil jsem program a ..- samotřejmě žádná okna se neobjavila, ale spousta čevených výpisů, celý román, a nakonec Build suscesfull! - no super!, opakovaně.....a teď co dál?
Je škoda, že Scene Builder není integrován do NetBeans....

 
Odpovědět 5.11.2017 20:08
Avatar
Feri Laky
Člen
Avatar
Feri Laky:5.11.2017 20:24

Zatím jsem si naprogramoval dva krátke prográmky v NetBeans na výpočet správnosti platu (srovnává s výplatní páskou) a druhý na výpočet plateb za služby ve všední dny, víkendy a svátky - (jsou odlišně placené) - a bez problémů mi fungují.
Jakmile jsem začal s tímto Builderem mám jen problémy - úžasné "urychlení a pomoc":-(( - v Delphi to šlo bleskově a bez jakýchkloi problémů - kombinace Scene Builderu a NetBeans je je neuvěřtelne komplikovaná, takže si tu kalkulačku asi udělám v obyčejném Java Source-u.....

 
Odpovědět 5.11.2017 20:24
Avatar
Michal H.
Člen
Avatar
Michal H.:4.3.2018 8:45

Ahoj, tak přiznávám že jsem zlenivělej z práce ve VS, ale upřímě tohle mi připadá jako nejkratší cesta do pekel :D Stačí jeden překlep a máš to :) No uvídíme co bude dál :)

Měl bych jeden dotaz. Když z cmBoxu získám objekt přetypovaný na string ( a uložený jako string) tak proč mi to nejde vytisknout na konzoli natož nastavit jako text?

String o = (String)cmbOp.getSelectionModel().getSelectedItem();
System.out.println(o);
 
Odpovědět 4.3.2018 8:45
Avatar
Petr Štechmüller
Překladatel
Avatar
Odpovídá na Michal H.
Petr Štechmüller:4.3.2018 9:52

Ahoj, a co Ti to místo toho vypíše?
Mimochodem, lepší, než přetypovávat výsledek z metody getSelectedItem() je už při definici comboboxu definovat, jaký datový typ bude obsahovat.

@FXML
private ComboBox<String> cmbOp;
Odpovědět  +1 4.3.2018 9:52
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Michal H.
Člen
Avatar
Michal H.:4.3.2018 14:47

Ahoj, děkuji za typ a odpověď ( je to lepší takto definovat :) ). Teď jsem to vyzkoušl a problém opět mezi klávesnicí a židlí. Já zvířatko rohaté jaksi zapoměl, že ve stejné metodě se nachází i parsování TextFieldu. A jak jsem se soustředil na čistý výpis vybraného itemu, tak jsem samozřejmě TF nevyplňoval => že se to přez chybu nedostalo k vypsání :-` Njn asi to chce občas dát pauzu a nečumět do toho od páté ráno :D
Děkuji.

 
Odpovědět 4.3.2018 14:47
Avatar
Marty
Člen
Avatar
Marty:5.8.2018 16:45

Prvek Spinner pro zadávání čísel v FX není? Ve Scene Builderu ho nevidím.

 
Odpovědět 5.8.2018 16:45
Avatar
Petr Štechmüller
Překladatel
Avatar
Odpovídá na Marty
Petr Štechmüller:5.8.2018 16:55

Jaký používáš SceneBuilder? Ten od oraclu je již deprecated. Místo něj je tu verze od Gluonu.
Ve verzi od oraclu spinner není, v té od Gluonu by už být měl. A pokud není, tak ho normálně můžeš použít přímo v FXML.

Odpovědět 5.8.2018 16:55
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Marty
Člen
Avatar
Odpovídá na Petr Štechmüller
Marty:5.8.2018 22:24

Mám verzi 2.0, to by měla být poslední možná stažitelná verze od Oraclu. Díky za objasnění. Takže řekněme, že Gluon přebírá štafetu po Oraclu? Pročpak?
Právě mi bylo divné, proč i v lekcích FX není použitý na čísla právě ten Spinner.

 
Odpovědět 5.8.2018 22:24
Avatar
Libor Šimo (libcosenior):4.10.2018 18:37

Správne som pochopil, že html stránku s apkou JavaFX na google chrome nespustím?

Odpovědět 4.10.2018 18:37
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
MiroslavP
Člen
Avatar
MiroslavP:28.10.2018 12:59

dík za bezva výklad

 
Odpovědět 28.10.2018 12:59
Avatar
Radka Jánská:3.11.2018 1:30

Super :-)

 
Odpovědět 3.11.2018 1:30
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 52 zpráv z 52.