Programmering

JavaFX forbedringer i Java SE 8u40

Forrige 1 2 3 4 Side 3 Neste Side 3 av 4

Oppføring 5 bruker java.util. par klasse for å enkelt lagre et par elementer: søketeksten og den boolske saksfølsomme søkeverdien. En resultatomformer er installert for å konvertere dialogboksens søketekstfelt og store bokstaver for bokstaver til Par gjenstand som returneres fra anrop() metode. Denne konverteringen skjer bare når Søk knappen er klikket; det skjer ikke når Avbryt klikkes.

Leter du etter search.png?

Oppføring 5 er avhengig av en ekstern search.png bildefil, som er inkludert i denne artikkelens kodearkiv.

Sammensett oppføring 5 som følger:

javac SearchDialog.java

Kjør den resulterende applikasjonen som følger:

java SearchDialog

Figur 18 avslører den resulterende dialogen.

Figur 18: Søke-dialogboksen er som standard ingen søketekst og et skiftesensitivt søk

Anta at du går inn JavaFX i tekstfeltet og merker av i avmerkingsboksen. Etter å ha klikket Søk, bør du følge følgende utdata på standard utgangsstrøm:

Søketekst = JavaFX, Skift mellom store og små bokstaver = sant

Spørsmål: Kan du gi meg mer informasjon om JavaFXs støtte for standard og tilpassede dialoger?

EN: Ta en titt på JavaFX Dialogs for ytterligere standardeksempler og tilpassede dialogeksempler (inkludert en tilpasset påloggingsdialog), og for å lære om dialogstyling og innstilling av dialogeier og modalitet.

Spinner kontroll

Spørsmål: Hva er en spinner?

EN: EN spinner er en tekstlinjekontroll for en linje som lar brukeren velge et tall eller en objektverdi fra en ordnet sekvens av slike verdier. Spinnere gir vanligvis et par små pilknapper for å gå gjennom elementene i sekvensen. Tastaturet er pil opp/pil ned tastene blar også gjennom elementene. Brukeren kan også få lov til å skrive en (lovlig) verdi direkte i spinneren. Selv om kombinasjonsbokser gir lignende funksjonalitet, foretrekkes spinnere noen ganger fordi de ikke trenger en rullegardinliste som kan skjule viktige data, og også fordi de tillater funksjoner som innpakning fra maksimumsverdien tilbake til minimumsverdien (f.eks. fra det største positive heltallet til 0).

Spørsmål: Hvordan implementeres en spinner?

EN: En spinner implementeres som en forekomst av javafx.scene.control.Spinner kontrollklasse. Denne klassen er avhengig av det abstrakte javafx.scene.control.SpinnerValueFactory klasse for å gi kontrollens modell (utvalg av brukervalgbare verdier av en bestemt type). Foreløpig er de eneste støttede modellene definert av den nestede DoubleSpinnerValueFactory, IntegerSpinnerValueFactory, og ListSpinnerValueFactory klasser.

Spørsmål: Hvordan lager jeg en spinner?

EN: Du oppretter en spinner ved å ringe en av Spinnersine konstruktører. For eksempel, Spinner (int min, int max, int initialValue) oppretter en spinner for å velge en av heltallsverdiene fra min gjennom maks. Den opprinnelig valgte verdien identifiseres av Opprinnelig verdi. Hvis denne verdien ikke er i min/maks område, minVerdien blir den opprinnelig valgte verdien.

Spinner (int min, int max, int initialValue) er en praktisk konstruktør som installerer en forekomst av IntegerSpinnerValueFactory klasse med disse verdiene som modell. Hvis du foretrekker å jobbe direkte med IntegerSpinnerValueFactory, kan du sette i gang denne klassen og gi referansen til Spinner (SpinnerValueFactory valueFactory) konstruktør. Alternativt kan du opprette en tom spinner via Spinner () konstruktør og påkalle Spinners void setValueFactory (SpinnerValueFactory-verdi) metode for å installere dette fabrikkobjektet.

Spørsmål: Kan du gi et enkelt eksempel på spinnere med heltall og dobbel presisjon?

EN: Sjekk ut oppføring 6.

Oppføring 6. SpinnerDemo.java (versjon 1)

importere javafx.application.Application; importere javafx.geometry.Insets; importere javafx.scene.Scene; importere javafx.scene.control.Label; importere javafx.scene.control.Spinner; importere javafx.scene.layout.GridPane; importere javafx.stage.Stage; offentlig klasse SpinnerDemo utvider Application {@Override public void start (Stage primaryStage) {Spinner ispinner = new Spinner (1, 10, 2); Spinner dspinner = ny Spinner (1,5, 3,5, 1,5, 0,5); GridPane grid = ny GridPane (); grid.setHgap (10); grid.setVgap (10); grid.setPadding (nye innlegg (10)); grid.add (ny etikett ("Integer Spinner"), 0, 0); grid.add (ispinner, 1, 0); grid.add (ny etikett ("Double Spinner"), 0, 1); grid.add (dspinner, 1, 1); Scene scene = ny scene (rutenett, 350, 100); primaryStage.setTitle ("SpinnerDemo"); primaryStage.setScene (scene); primaryStage.show (); }}

Oppføring 6-er start() metoden oppretter først et heltallssnurr via den nevnte konstruktøren. Det skaper deretter en dobbel presisjon flytende punktsnurr via Spinner (dobbel min, dobbel maks, dobbel initialValue, dobbelt beløpToStepBy) konstruktør. Denne konstruktøren mottar enhetene der spinneren skal økes eller reduseres via verdien som sendes til amountToStepBy, som tilfeldigvis er 0.5.

Fortsetter, start() oppretter og konfigurerer en rutenettbeholder og fyller ut 2-rad-for-2-kolonne rutenett med disse spinnere og tilhørende etiketter. Deretter oppretter scenen basert på rutenettet og konfigurerer / viser scenen.

Sammendrag oppføring 6 som følger:

javac SpinnerDemo.java

Kjør den resulterende applikasjonen som følger:

java SpinnerDemo

Figur 19 avslører det resulterende brukergrensesnittet.

Figur 19: Klikk på hver spinnerpil for å øke / redusere gjennom verdiområdet

Spørsmål: Jeg vil gjøre de forrige spinnerne redigerbare. Hvordan utfører jeg denne oppgaven?

EN: Anrop Spinners void setEditable (boolsk verdi) metode, bestått ekte til verdi. Jeg har laget en ny versjon av SpinnerDemo å demonstrere. Se kildearkivet til denne artikkelen for kildekoden.

Spørsmål: Når jeg gjør de forrige spinnerne redigerbare, skriver du inn ulovlige tegn (for eksempel bokstaver) i tekstfeltet og trykker på Tast inn nøkkel, kastes et unntak. Unntaket er java.lang.NumberFormatException for den heltalsbaserte spinneren og java.lang.RuntimeException (innpakning java.text.ParseException) for dobbel presisjon flytende punktsnurr. Hvordan kan jeg forhindre at dette unntaket blir kastet?

EN: Du kan forhindre at dette unntaket blir kastet ved å installere en forekomst av en underklasse av abstraktet javafx.util.StringConverter klasse (hvor T er typen som blir konvertert til eller fra String) som SpinnerValueFactory omformer. Dette objektet vil fange unntaket som kastes og iverksette tiltak.

Spinner bruker en javafx.scene.control.TextField objekt som redaktør for å skaffe brukerinngang. Fordi et tekstfelt kan lagre hvilket som helst tegn, kan upassende tegn som bokstaver i en numerisk sammenheng legges inn. Etter at brukeren har trykket Tast inn, blir inngangen sendt til SpinnerValueFactory omformerens T fromString (strengstreng) metode. For fabrikkene med heltall eller dobbel presisjon, T er enten Heltall eller Dobbelt. Konvertering fra en streng med ulovlige tegn til et nummer fører til at unntaket blir kastet fra fromString (). Få en referanse til gjeldende omformer og installer en ny omformer hvis fromString () metoden påkaller den andre omformerens fromString () metode i en prøve uttalelse med en passende å fange blokkere. Oppføring 7 presenterer et program som utfører denne oppgaven.

Oppføring 7. SpinnerDemo.java (versjon 3)

importere javafx.application.Application; importere javafx.geometry.Insets; importere javafx.scene.Scene; importere javafx.scene.control.Label; importere javafx.scene.control.Spinner; importere javafx.scene.layout.GridPane; importere javafx.stage.Stage; importere javafx.util.StringConverter; offentlig klasse SpinnerDemo utvider 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); } fangst (NumberFormatException nfe) {System.out.println ("Dårlig heltall:" + verdi); retur 0; }} @ Override public String toString (Integer value) {return sci.toString (value); }}; ispinner.getValueFactory (). setConverter (sci2); Spinner dspinner = ny Spinner (1,5, 3,5, 1,5, 0,5); dspinner.setEditable (true); StringConverter scd = dspinner.getValueFactory (). GetConverter (); StringConverter scd2 = ny StringConverter () {@Override public Double fromString (Strengverdi) {prøv {return scd.fromString (verdi); } fange (RuntimeException re) {System.out.println ("Dårlig dobbel:" + verdi); System.out.println ("Årsak:" + re.getCause ()); retur 0,0; }} @ Override public String toString (Double value) {return scd.toString (value); }}; dspinner.getValueFactory (). setConverter (scd2); GridPane grid = ny GridPane (); grid.setHgap (10); grid.setVgap (10); grid.setPadding (nye innlegg (10)); grid.add (ny etikett ("Integer Spinner"), 0, 0); grid.add (ispinner, 1, 0); grid.add (ny etikett ("Double Spinner"), 0, 1); grid.add (dspinner, 1, 1); Scene scene = ny scene (rutenett, 350, 100); primaryStage.setTitle ("SpinnerDemo"); primaryStage.setScene (scene); primaryStage.show (); }}

Kompilere oppføring 7 (javac SpinnerDemo.java) og kjør den resulterende applikasjonen (java SpinnerDemo). Du bør observere feilmeldinger som ligner på de som vises nedenfor når du skriver inn ulovlige tegn i tekstfeltet til en spinner:

Dårlig heltall: a2 Dårlig dobbel: b1.5 Årsak: java.text.ParseException: Kan ikke deles: "b1.5"

Spørsmål: Jeg trenger en strengbasert spinner. Hvordan får jeg en?

EN: Du kan få en strengbasert spinner via Spinner (ObservableList items) konstruktør. For eksempel viser følgende kodefragment hvordan du lager en spinner for å velge et ukedagsnavn:

Liste weekDays = Arrays.asList ("mandag", "tirsdag", "onsdag", "torsdag", "fredag", "lørdag", "søndag"); ObservableList obsWeekDays = FXCollections.observableList (weekDays); Spinner sspinner = ny Spinner (obsWeekDays);

Jeg utdraget dette kodefragmentet fra en fjerde versjon av SpinnerDemo applikasjon (se kildearkivet til denne artikkelen for kildekoden). Når du kjører applikasjonen, ser du spinneren vist i figur 20.

Figur 20: Forsøk på å legge inn tekst i redigereren som ikke stemmer overens med et av ukedagens navn, resulterer i java.lang.UnsupportedOperationException blir kastet

Spørsmål: Kan du gi meg mer informasjon om JavaFXs støtte for spinnere?

EN: Sjekk JavaFX 8-dokumentasjonen på Spinner og SpinnerValueFactory for mer informasjon om denne kontrollen og dens modell. Det kan også være lurt å kjøre et Google-søk for å finne ut hvordan andre bruker denne kontrollen.

Tekstformatering

Spørsmål: Hvordan støtter JavaFX tekstformatering?

EN: JavaFX støtter tekstformatering ved å oppgi javafx.scene.control.TextFormatter klasse med nestet Endring klasse. Videre det abstrakte javafx.scene.control.TextInputControl klasse (foreldreklassen til Tekstfelt og javafx.scene.control.TextArea) har fått en textFormatter egenskap slik at en hvilken som helst underklasse automatisk støtter tekstformatering.

Spørsmål: Hvilke typer tekstformatering støttes?

EN:TextFormatter støtter to typer tekstformatering: verdi og endring. EN verdi formaterer kalles når du trykker på Tast inn tasten etter at du har skrevet inn teksten. EN endre formater kalles for hver tekstsletting, teksttillegg og endring av tekst for den fokuserte tekstinntastingskontrollen. Disse formaterne kan brukes hver for seg eller sammen.

Spørsmål: Hvordan spesifiseres verdi- og endringsformater?

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