Programování

Vylepšení JavaFX v prostředí Java SE 8u40

Předchozí 1 2 3 4 Strana 3 Další Strana 3 ze 4

Výpis 5 používá java.util.Pair třídy pro pohodlné uložení dvojice položek: vyhledávaný text a logická hodnota hledání s rozlišením malých a velkých písmen. Byl nainstalován převaděč výsledků, který převede hodnoty pole pro vyhledávání v dialogovém okně a hledání rozlišují velká a malá písmena na a Pár objekt, který je vrácen z volání() metoda. K tomuto převodu dojde, pouze když Vyhledávání tlačítko je kliknuto; to se nestane, když zrušení je kliknuto.

Hledáte search.png?

Výpis 5 závisí na externím search.png obrazový soubor, který je obsažen v archivu kódů tohoto článku.

Sestavte výpis 5 následujícím způsobem:

javac SearchDialog.java

Výslednou aplikaci spusťte následovně:

java SearchDialog

Obrázek 18 ukazuje výsledný dialog.

Obrázek 18: Výchozí dialogové okno vyhledávání neobsahuje žádný text pro vyhledávání a hledání bez rozlišení velkých a malých písmen

Předpokládejme, že vstoupíte JavaFX do textového pole a zaškrtněte políčko. Po kliknutí Vyhledávání, měli byste dodržovat následující výstup ve standardním výstupním proudu:

Vyhledávaný text = JavaFX, vyhledávání malých a velkých písmen = true

Otázka: Můžete mi poskytnout více informací o podpoře standardních a vlastních dialogů JavaFX?

A: V dialogových oknech JavaFX najdete další příklady standardních a vlastních dialogových oken (včetně vlastního dialogového okna pro přihlášení) a dozvíte se více o stylingu dialogových oken a nastavení vlastníka a modality dialogového okna.

Ovládání číselníku

Otázka: Co je to spinner?

A: A kužel je jednořádkový ovládací prvek textového pole, který umožňuje uživateli vybrat číslo nebo hodnotu objektu z seřazené sekvence takových hodnot. Přadleny obvykle poskytují pár drobných tlačítek se šipkami pro procházení prvky sekvence. Klávesnice šipka nahoru/šipka dolů klávesy také procházejí prvky. Uživateli může být také povoleno zadat (legální) hodnotu přímo do číselníku. Ačkoli pole se seznamem poskytují podobné funkce, jsou přadávače někdy upřednostňovány, protože nevyžadují rozevírací seznam, který může zakrýt důležitá data, a také proto, že umožňují funkce, jako je zabalení z maximální hodnoty zpět na minimální hodnotu (např od největšího kladného celého čísla do 0).

Otázka: Jak je spinner implementován?

A: Rozmetadlo je implementováno jako instance javafx.scene.control.Spinner kontrolní třída. Tato třída se opírá o abstrakt javafx.scene.control.SpinnerValueFactory class to provide the control's model (range of user-selectable values ​​of a specific type). V současné době jsou jeho vnořené definovány pouze podporované modely DoubleSpinnerValueFactory, IntegerSpinnerValueFactory, a ListSpinnerValueFactory třídy.

Otázka: Jak vytvořím číselník?

A: Roztoč vytvoříte voláním jednoho z Spinnerkonstruktéři. Například, Spinner (int min, int max, int initialValue) vytvoří číselník pro výběr jedné z celočíselných hodnot min přes max. Původně vybraná hodnota je označena počáteční hodnota. Pokud tato hodnota není v min/max rozsah, minHodnota se stane původně vybranou hodnotou.

Spinner (int min, int max, int initialValue) je konstruktor pohodlí, který nainstaluje instanci IntegerSpinnerValueFactory třída s těmito hodnotami jako model. Pokud dáváte přednost přímé spolupráci s IntegerSpinnerValueFactory, můžete vytvořit instanci této třídy a předat její odkaz na Spinner (SpinnerValueFactory valueFactory) konstruktor. Alternativně můžete vytvořit prázdný číselník pomocí Spinner () konstruktor a vyvolat Spinnerje void setValueFactory (hodnota SpinnerValueFactory) metoda instalace tohoto továrního objektu.

Otázka: Můžete uvést jednoduchý příklad celočíselných a dvojitých přesných čísel s plovoucí desetinnou čárkou?

A: Podívejte se na výpis 6.

Výpis 6. SpinnerDemo.java (verze 1)

import javafx.application.Application; import javafx.geometry.Insets; importovat javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.control.Spinner; import javafx.scene.layout.GridPane; importovat javafx.stage.Stage; public class SpinnerDemo rozšiřuje Application {@Override public void start (Stage primaryStage) {Spinner ispinner = new Spinner (1, 10, 2); Spinner dspinner = nový Spinner (1,5; 3,5; 1,5; 0,5); GridPane grid = new GridPane (); grid.setHgap (10); grid.setVgap (10); grid.setPadding (nové vložky (10)); grid.add (nový štítek ("Integer Spinner"), 0, 0); grid.add (ispinner, 1, 0); grid.add (nový štítek („Double Spinner“), 0, 1); grid.add (dspinner, 1, 1); Scéna scéna = nová scéna (mřížka, 350, 100); primaryStage.setTitle ("SpinnerDemo"); primaryStage.setScene (scéna); primaryStage.show (); }}

Výpis 6 Start() metoda nejprve vytvoří celočíselný číselník prostřednictvím výše uvedeného konstruktoru. Poté vytvoří dvojitý přesný číselník s plovoucí desetinnou čárkou pomocí Spinner (double min, double max, double initialValue, double amountToStepBy) konstruktor. Tento konstruktor přijímá jednotky, ve kterých se zvýší nebo sníží číselník pomocí hodnoty předané amountToStepBy, což se stalo 0.5.

Pokračování, Start() vytvoří a nakonfiguruje kontejner podokna mřížky a naplní mřížku 2 řádky po 2 sloupcích těmito přadleny a přidruženými štítky. Poté vytvoří scénu na základě mřížky a nakonfiguruje / zobrazí scénu.

Sestavte výpis 6 následujícím způsobem:

javac SpinnerDemo.java

Výslednou aplikaci spusťte následovně:

java SpinnerDemo

Obrázek 19 ukazuje výsledné uživatelské rozhraní.

Obrázek 19: Kliknutím na šipky každého rozmetače zvýšíte / snížíte rozsah hodnot

Otázka: Chci, aby byly předchozí přadleny upravitelné. Jak mohu dosáhnout tohoto úkolu?

A: Volání Spinnerje void setEditable (logická hodnota) metoda, absolvování skutečný na hodnota. Vytvořil jsem druhou verzi SpinnerDemo předvést. Zdrojový kód najdete v archivu kódů tohoto článku.

Otázka: Když upravím předchozí přadleny, zadejte do textového pole nelegální znaky (například písmena) a stiskněte klávesu Enter klíč, vyvolána výjimka. Výjimkou je java.lang.NumberFormatException pro celočíselný číselník a java.lang.RuntimeException (obal java.text.ParseException) pro dvojitý přesný číselník s plovoucí desetinnou čárkou. Jak mohu zabránit vyvolání této výjimky?

A: Vyloučení této výjimky můžete zabránit instalací instance podtřídy abstraktu javafx.util.StringConverter třída (kde T je typ převáděný na nebo z Tětiva) jako SpinnerValueFactory konvertor. Tento objekt by zachytil vyvolanou výjimku a přijal opatření.

Spinner používá a javafx.scene.control.TextField objekt jako editor pro získání vstupu uživatele. Protože do textového pole lze uložit libovolný znak, lze zadat nevhodné znaky, jako jsou písmena, v číselném kontextu. Poté, co uživatel stiskne Enter, vstup je předán do SpinnerValueFactory převaděče T fromString (řetězec) metoda. Pro továrny s celočíselnou nebo dvojitou přesností s plovoucí desetinnou čárkou T je buď Celé číslo nebo Dvojnásobek. Převod z řetězce s neplatnými znaky na číslo má za následek vyvolání výjimky fromString (). Získejte odkaz na aktuální převodník a nainstalujte nový převodník, jehož fromString () metoda vyvolá ostatní převaděče fromString () metoda v a Snaž se prohlášení s příslušným chytit blok. Výpis 7 představuje aplikaci, která plní tento úkol.

Výpis 7. SpinnerDemo.java (verze 3)

import javafx.application.Application; import javafx.geometry.Insets; importovat javafx.scene.Scene; importovat javafx.scene.control.Label; import javafx.scene.control.Spinner; import javafx.scene.layout.GridPane; importovat javafx.stage.Stage; import javafx.util.StringConverter; public class SpinnerDemo rozšiřuje aplikaci {@Override public void start (Stage primaryStage) {Spinner ispinner = new Spinner (1, 10, 2); ispinner.setEditable (true); StringConverter sci = ispinner.getValueFactory (). GetConverter (); StringConverter sci2 = new StringConverter () {@Override public Integer fromString (String value) {try {return sci.fromString (value); } catch (NumberFormatException nfe) {System.out.println ("Bad integer:" + value); návrat 0; }} @Override public String toString (Integer value) {return sci.toString (value); }}; ispinner.getValueFactory (). setConverter (sci2); Spinner dspinner = nový Spinner (1,5; 3,5; 1,5; 0,5); dspinner.setEditable (true); StringConverter scd = dspinner.getValueFactory (). GetConverter (); StringConverter scd2 = new StringConverter () {@Override public Double fromString (String value) {try {return scd.fromString (value); } catch (RuntimeException re) {System.out.println ("Bad double:" + hodnota); System.out.println ("Příčina:" + re.getCause ()); návratnost 0,0; }} @Override public String toString (Double value) {return scd.toString (value); }}; dspinner.getValueFactory (). setConverter (scd2); GridPane grid = new GridPane (); grid.setHgap (10); grid.setVgap (10); grid.setPadding (nové vložky (10)); grid.add (nový štítek ("Integer Spinner"), 0, 0); grid.add (ispinner, 1, 0); grid.add (nový štítek („Double Spinner“), 0, 1); grid.add (dspinner, 1, 1); Scéna scéna = nová scéna (mřížka, 350, 100); primaryStage.setTitle ("SpinnerDemo"); primaryStage.setScene (scéna); primaryStage.show (); }}

Zkompilovat výpis 7 (javac SpinnerDemo.java) a spusťte výslednou aplikaci (java SpinnerDemo). Při zadávání nepovolených znaků do textového pole číselníku byste měli sledovat chybové zprávy podobné těm, které jsou uvedeny níže:

Špatné celé číslo: a2 Špatné dvojité: b1,5 Příčina: java.text.ParseException: Neporovnatelné číslo: "b1,5"

Otázka: Potřebuji řetězový spinner. Jak je mohu získat?

A: Řetězcový spinner můžete získat prostřednictvím Spinner (položky pozorovatelného seznamu) konstruktor. Například následující fragment kódu ukazuje, jak vytvořit číselník pro výběr názvu dne v týdnu:

Seznam weekDays = Arrays.asList ("pondělí", "úterý", "středa", "čtvrtek", "pátek", "sobota", "neděle"); ObservableList obsWeekDays = FXCollections.observableList (weekDays); Spinner sspinner = nový Spinner (obsWeekDays);

Vyňal jsem tento fragment kódu ze čtvrté verze SpinnerDemo aplikace (zdrojový kód najdete v archivu kódů tohoto článku). Když spustíte tuto aplikaci, uvidíte číselník zobrazený na obrázku 20.

Obrázek 20: Při pokusu o zadání textu do editoru, který přesně neodpovídá jednomu z názvů dnů v týdnu java.lang.UnsupportedOperationException být hozen

Otázka: Můžete mi poskytnout více informací o podpoře JavaFX pro přadleny?

A: Podívejte se na dokumentaci JavaFX 8 na Spinner a SpinnerValueFactory Další informace o tomto ovládacím prvku a jeho modelu. Možná budete také chtít spustit vyhledávání Google, abyste zjistili, jak ostatní používají tento ovládací prvek.

Formátování textu

Otázka: Jak JavaFX podporuje formátování textu?

A: JavaFX podporuje formátování textu poskytováním javafx.scene.control.TextFormatter třída s vnořenými Změna třída. Dále abstrakt javafx.scene.control.TextInputControl třída (nadřazená třída Textové pole a javafx.scene.control.TextArea) dostal a textový formát vlastnost, takže libovolná podtřída automaticky podporuje formátování textu.

Otázka: Jaké druhy formátování textu jsou podporovány?

A:Textový formát podporuje dva druhy formátování textu: hodnotu a změnu. A formátovač hodnot když stisknete Enter po zadání textu. A změnit formátovač je volána pro každou změnu odstranění textu, přidání textu a nahrazení textu pro ovládací prvek pro zadávání textu. Tyto formátory lze použít samostatně nebo společně.

Otázka: Jak jsou specifikovány formátovače hodnot a změn?

$config[zx-auto] not found$config[zx-overlay] not found