Poboljšanja JavaFX-a u Javi SE 8u40

Prethodna 1 2 3 4 Stranica 3 Sljedeća Stranica 3 od 4

Popis 5 koristi java.util.Pairklasu za prikladno spremanje par predmeta: tekst pretraživanja i vrijednost logičkog pretraživanja osjetljiva na velika i mala slova. Instaliran je pretvarač rezultata koji pretvara tekstualno polje za pretraživanje dijaloškog okvira i vrijednosti okvira za pretraživanje s velikim i Pairmalim slovima u objekt koji se vraća iz call()metode. Ova se pretvorba događa samo kada Searchse klikne gumb; to se ne događa kad Cancelse klikne.

Tražite search.png?

Popis 5 oslanja se na vanjsku search.pngslikovnu datoteku koja je uključena u arhivu koda ovog članka.

Sastavite popis 5 kako slijedi:

javac SearchDialog.java

Pokrenite rezultirajuću aplikaciju na sljedeći način:

java SearchDialog

Slika 18 otkriva rezultirajući dijalog.

Slika 18: Dijaloški okvir pretraživanja prema zadanim postavkama nije tekst pretraživanja i pretraživanje bez velikih i malih slova

Pretpostavimo da unesete JavaFXu polje za tekst i potvrdite okvir. Nakon klika Search, trebali biste promatrati sljedeći izlaz na standardnom izlaznom toku:

Search text = JavaFX, Case-sensitive search = true

P: Možete li mi pružiti više informacija o podršci JavaFX-a za standardne i prilagođene dijaloške okvire?

O: U JavaFX dijaloškim okvirima potražite dodatne primjere standardnih i prilagođenih dijaloga (uključujući prilagođeni dijaloški okvir za prijavu) te saznajte više o stilu dijaloga i postavljanju vlasnika i modaliteta dijaloga.

Kontrola okretaja

P: Što je spinner?

O: pauk je kontrola polje tekst jednog linija koja omogućuje korisniku odabir broja ili vrijednost objekta iz naredio slijed takvih vrijednosti. Spinneri obično nude par sitnih gumba sa strelicama za prolazak kroz elemente niza. Tipkovnice up arrow/ down arrowtipke također kruže kroz elemente. Korisniku se također može dopustiti da upiše (pravnu) vrijednost izravno u okretač. Iako kombinirani okviri pružaju sličnu funkcionalnost, okretači su ponekad preferirani jer im nije potreban padajući popis koji može prikriti važne podatke, a također i zato što omogućuju značajke kao što je omatanje s maksimalne vrijednosti natrag na minimalnu vrijednost (npr. od najvećeg pozitivnog cijelog broja do 0).

P: Kako se primjenjuje spinner?

O: Predilica je implementirana kao instanca javafx.scene.control.Spinnerkontrolne klase. Ova se klasa oslanja na apstraktnu javafx.scene.control.SpinnerValueFactoryklasu koja pruža model kontrole (raspon vrijednosti koje korisnik može odabrati za određeni tip). Trenutno, jedini podržani modeli su definirana svojim ugniježđena DoubleSpinnerValueFactory, IntegerSpinnerValueFactoryi ListSpinnerValueFactoryklasa.

P: Kako mogu stvoriti spinner?

O: Okretnicu kreirate pozivanjem jednog od Spinnerkonstruktora. Na primjer, Spinner(int min, int max, int initialValue)stvara okretač za odabir jedne od cijelih vrijednosti od minkroz max. Prvobitno odabrana vrijednost prepoznaje se pomoću initialValue. Ako ova vrijednost nije u min/ maxrasponu, minvrijednost 'postaje početno odabrana vrijednost.

Spinner(int min, int max, int initialValue)je konstruktor pogodnosti koji IntegerSpinnerValueFactorykao model instalira primjerak klase s tim vrijednostima. Ako više volite izravno surađivati IntegerSpinnerValueFactory, možete stvoriti instancu ove klase i proslijediti njezinu referencu Spinner(SpinnerValueFactory valueFactory)konstruktoru. Alternativno, možete stvoriti praznu pauk preko Spinner()konstruktora i dozivati Spinnerje void setValueFactory(SpinnerValueFactory value)metoda za instaliranje ove tvornice objekt.

P: Možete li dati jednostavan primjer okretača s pomičnim zarezom s cijelom i dvostrukom preciznošću?

O: Pogledajte popis 6.

Popis 6. SpinnerDemo.java(verzija 1)

import javafx.application.Application; import javafx.geometry.Insets; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.control.Spinner; import javafx.scene.layout.GridPane; import javafx.stage.Stage; public class SpinnerDemo extends Application { @Override public void start(Stage primaryStage) { Spinner ispinner = new Spinner(1, 10, 2); Spinner dspinner = new Spinner(1.5, 3.5, 1.5, 0.5); GridPane grid = new GridPane(); grid.setHgap(10); grid.setVgap(10); grid.setPadding(new Insets(10)); grid.add(new Label("Integer Spinner"), 0, 0); grid.add(ispinner, 1, 0); grid.add(new Label("Double Spinner"), 0, 1); grid.add(dspinner, 1, 1); Scene scene = new Scene(grid, 350, 100); primaryStage.setTitle("SpinnerDemo"); primaryStage.setScene(scene); primaryStage.show(); } }

start()Metoda popisa 6 prvo stvara cjelobrojni spinner putem gore spomenutog konstruktora. Zatim preko Spinner(double min, double max, double initialValue, double amountToStepBy)konstruktora stvara dvostruku preciznost okretača s pomičnim zarezom . Ovaj konstruktor prima jedinice u kojima se može povećavati ili smanjivati ​​okretač putem vrijednosti koja se prosljeđuje amountToStepBy, a koja je slučajno 0.5.

Nastavljajući, start()stvara i konfigurira spremnik mrežnog okna i popunjava mrežu od 2 reda po 2 stupca tim okretačima i povezanim oznakama. Zatim stvara scenu na temelju rešetke i konfigurira / prikazuje scenu.

Sastavite popis 6 kako slijedi:

javac SpinnerDemo.java

Pokrenite rezultirajuću aplikaciju na sljedeći način:

java SpinnerDemo

Slika 19 otkriva rezultirajuće korisničko sučelje.

Slika 19: Kliknite strelice svakog okretača za povećavanje / smanjivanje kroz raspon vrijednosti

P: Želim učiniti prethodne okretaje dostupnima za uređivanje. Kako mogu izvršiti ovaj zadatak?

Odgovor: Poziv Spinnerje void setEditable(boolean value)metoda, prolazi truese value. Napravio sam drugu verziju SpinnerDemoza demonstraciju. Izvorni kod potražite u arhivi kodova ovog članka.

P: Kad učinim da se prethodni spineri mogu uređivati, u tekstualno polje upišite nedopuštene znakove (poput slova) i pritisnite Entertipku, pojavit će se iznimka. Iznimka je java.lang.NumberFormatExceptionza spiner na bazi cijelih brojeva i java.lang.RuntimeException(omotavanje java.text.ParseException) za spiner s dvostrukom preciznošću s pomičnim zarezom. Kako mogu spriječiti izbacivanje ove iznimke?

O: Možete spriječiti izbacivanje ove iznimke instaliranjem instance podklase apstraktne javafx.util.StringConverterklase (gdje Tje vrsta u koju se pretvara ili iz nje String) kao SpinnerValueFactorypretvarača. Ovaj bi objekt uhvatio izuzetak i bacio akciju.

Spinner uses a javafx.scene.control.TextField object as an editor for obtaining user input. Because a text field can store any character, inappropriate characters such as letters in a numeric context can be entered. After the user presses Enter, the input is passed to the SpinnerValueFactory converter's T fromString(String string) method. For the integer or double precision floating-point factories, T is either Integer or Double. Converting from a string with illegal characters to a number results in the exception being thrown from fromString(). Obtain a reference to the current converter and install a new converter whose fromString() method invokes the other converter's fromString() method in a try statement with an appropriate catch block. Listing 7 presents an application that accomplishes this task.

Popis 7. SpinnerDemo.java(verzija 3)

import javafx.application.Application; import javafx.geometry.Insets; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.control.Spinner; import javafx.scene.layout.GridPane; import javafx.stage.Stage; import javafx.util.StringConverter; public class SpinnerDemo extends Application { @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); return 0; } } @Override public String toString(Integer value) { return sci.toString(value); } }; ispinner.getValueFactory().setConverter(sci2); Spinner dspinner = new 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: " + value); System.out.println("Cause: " + re.getCause()); return 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(new Insets(10)); grid.add(new Label("Integer Spinner"), 0, 0); grid.add(ispinner, 1, 0); grid.add(new Label("Double Spinner"), 0, 1); grid.add(dspinner, 1, 1); Scene scene = new Scene(grid, 350, 100); primaryStage.setTitle("SpinnerDemo"); primaryStage.setScene(scene); primaryStage.show(); } }

Sastavite popis 7 ( javac SpinnerDemo.java) i pokrenite rezultirajuću aplikaciju ( java SpinnerDemo). Trebali biste primijetiti poruke pogreške slične onima prikazanim u nastavku kada unosite nedozvoljene znakove u tekstualno polje spinnera:

Bad integer: a2 Bad double: b1.5 Cause: java.text.ParseException: Unparseable number: "b1.5"

P: Potrebna mi je predilica na bazi žica. Kako mogu dobiti jedan?

O: Predelo na bazi žica možete dobiti putem Spinner(ObservableList items)konstruktora. Na primjer, sljedeći fragment koda pokazuje vam kako stvoriti spinner za odabir naziva radnog dana:

List weekDays = Arrays.asList("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"); ObservableList obsWeekDays = FXCollections.observableList(weekDays); Spinner sspinner = new Spinner(obsWeekDays);

Izvadio sam ovaj fragment koda iz četvrte verzije SpinnerDemoaplikacije (izvorni kod pogledajte u arhivi koda ovog članka). Kada pokrenete tu aplikaciju, vidjet ćete okretač prikazan na slici 20.

Figure 20: Attempting to enter text into the editor that doesn't exactly match one of the weekday names results in java.lang.UnsupportedOperationException being thrown

Q: Can you provide me with more information about JavaFX's support for spinners?

A: Check out the JavaFX 8 documentation on Spinner and SpinnerValueFactory for more information about this control and its model. Also, you might want to run a Google search to find out how others are using this control.

Text formatting

Q: How does JavaFX support text formatting?

A: JavaFX supports text formatting by providing the javafx.scene.control.TextFormatter class with its nested Change class. Furthermore, the abstract javafx.scene.control.TextInputControl class (the parent class of TextField and javafx.scene.control.TextArea) has been given a textFormatter property so that any subclass automatically supports text formatting.

Q: What kinds of text formatting are supported?

A:TextFormatter supports two kinds of text formatting: value and change. A value formatter is called when you press the Enter key after entering the text. A change formatter is called for every text-deletion, text-addition, and text-replacement change for the focused text-input control. These formatters can be used separately or together.

Q: How are value and change formatters specified?