Ohjelmointi

JavaFX-parannukset Java SE 8u40: ssä

Edellinen 1 2 3 4 Sivu 3 Seuraava Sivu 3/4

Luettelossa 5 käytetään java.util.Pair luokkaan, jotta voit kätevästi tallentaa pari kohdetta: hakuteksti ja Boolen kirjainkoko-haku-arvo. Tulosmuunnin on asennettu muuntamaan valintaikkunan hakutekstikentän ja kirjainkokoisen hakuruudun arvot a-arvoiksi Pari objekti, joka palautetaan puhelu() menetelmä. Tämä muunnos tapahtuu vain, kun Hae -painiketta napsautetaan; se ei tapahdu milloin Peruuttaa napsautetaan.

Etsitkö search.png-tiedostoa?

Listaus 5 perustuu ulkoiseen search.png kuvatiedosto, joka sisältyy tämän artikkelin koodiarkistoon.

Koosta Listaus 5 seuraavasti:

javac SearchDialog.java

Suorita tuloksena oleva sovellus seuraavasti:

java SearchDialog

Kuva 18 paljastaa tuloksena olevan valintaikkunan.

Kuva 18: Hakuvalintaikkuna ei oletusarvoisesti sisällä hakutekstiä ja kirjainkoko ei eroa

Oletetaan, että syöt JavaFX tekstikentässä ja valitse valintaruutu. Napsauttamisen jälkeen Hae, sinun tulee noudattaa seuraavaa lähtöä vakiolähtövirrassa:

Hakuteksti = JavaFX, isot ja pienet kirjaimet = tosi

K: Voitteko antaa minulle lisätietoja JavaFX: n tuesta vakio- ja mukautetuille valintaikkunoille?

A: Tutustu JavaFX-valintaikkunoihin, joissa on lisää vakio- ja mukautettuja valintaikkunoita (mukaan lukien mukautettu kirjautumisikkuna) ja lisätietoja valintaikkunan tyylistä sekä valintaikkunan omistajan ja muodon asettamisesta.

Spinner-ohjaus

K: Mikä on kehrääjä?

A: A kiekkoa on yksirivinen tekstikenttäohjaus, jonka avulla käyttäjä voi valita numeron tai objektiarvon tällaisten arvojen järjestetystä järjestyksestä. Spinnerit tarjoavat tyypillisesti parin pieniä nuolipainikkeita jakson elementtien läpi siirtymiseen. Näppäimistön nuoli ylöspäin/alanuoli näppäimet selaavat myös elementtejä. Käyttäjä voidaan myös antaa kirjoittaa (laillinen) arvo suoraan kiekkoon. Vaikka yhdistelmäruudut tarjoavat samanlaisia ​​toimintoja, kiekkoa pidetään joskus parempana, koska ne eivät vaadi avattavaa luetteloa, joka voi peittää tärkeät tiedot, ja myös siksi, että ne mahdollistavat sellaisten ominaisuuksien kuten käärimisen suurimmasta arvosta takaisin minimiarvoon (esim. suurimmasta positiivisesta kokonaisluvusta arvoon 0).

K: Kuinka kehrääjä toteutetaan?

A: Spinner on toteutettu javafx.scene.control.Spinner ohjausluokka. Tämä luokka perustuu abstraktiin javafx.scene.control.SpinnerValueFactory luokka ohjausobjektin mallin toimittamiseksi (tietyn tyyppinen käyttäjän valittavissa olevien arvojen alue). Tällä hetkellä ainoat tuetut mallit määritetään sen sisäkkäin DoubleSpinnerValueFactory, IntegerSpinnerValueFactoryja ListSpinnerValueFactory luokat.

K: Kuinka luon kehräimen?

A: Voit luoda kiekon soittamalla johonkin Spinnerrakentajia. Esimerkiksi, Spinner (int min, int max, int initialValue) luo kehruu yhden kokonaisluvun valitsemiseksi kohdasta min kautta enint. Alun perin valittu arvo tunnistetaan initialValue. Jos tätä arvoa ei ole min/enint alue, min: n arvosta tulee alun perin valittu arvo.

Spinner (int min, int max, int initialValue) on mukavuusrakentaja, joka asentaa IntegerSpinnerValueFactory luokan nämä arvot mallina. Jos haluat työskennellä suoraan IntegerSpinnerValueFactory, voit hakea tämän luokan ja välittää sen viitteen Spinner (SpinnerValueFactory valueFactory) rakentaja. Vaihtoehtoisesti voit luoda tyhjän kiekkoa Kiekko () rakentaja ja vedota Spinneron void setValueFactory (SpinnerValueFactory-arvo) tapa asentaa tämä tehdasobjekti.

K: Voitteko antaa yksinkertaisen esimerkin kokonaisluvuista ja kaksitarkkuuksisista liukulukulampuista?

A: Tutustu luetteloon 6.

Listaus 6. SpinnerDemo.java (versio 1)

tuo javafx.application.Application; tuo javafx.geometry.Insets; tuo javafx.scene.Scene; tuo javafx.scene.control.Label; tuo javafx.scene.control.Spinner; tuo javafx.scene.layout.GridPane; tuo javafx.stage.Stage; public class SpinnerDemo laajentaa sovellusta {@Override public void start (Stage primaryStage) {Spinner ispinner = uusi kiekko (1, 10, 2); Spinner dspinner = uusi kiekko (1.5, 3.5, 1.5, 0.5); GridPane ruudukko = new GridPane (); grid.setHgap (10); grid.setVgap (10); grid.setPadding (uudet lisäosat (10)); grid.add (uusi tarra ("Integer Spinner"), 0, 0); grid.add (ispinner, 1, 0); grid.add (uusi tarra ("Double Spinner"), 0, 1); ruudukko. lisää (dspinner, 1, 1); Scene scene = uusi kohtaus (ruudukko, 350, 100); primaryStage.setTitle ("SpinnerDemo"); primaryStage.setScene (kohtaus); primaryStage.show (); }}

Listaus 6: sta alkaa() method luo ensin kokonaisluvun kiekon edellä mainitun konstruktorin kautta. Sitten se luo kaksinkertaisen tarkkuuden liukulampun kiekon Spinner (kaksinkertainen min, double max, double initialValue, double summaToStepBy) rakentaja. Tämä konstruktori vastaanottaa yksiköt, joissa kiekkoa voidaan lisätä tai vähentää, välitetyn arvon kautta määräToStepBy, joka sattuu olemaan 0.5.

Jatkuu, alkaa() luo ja konfiguroi ruudukkoruudun säilön ja täyttää 2-rivinen 2-sarake ruudukon näillä kiekkoilla ja niihin liittyvillä tarroilla. Sitten se luo näkymän ruudukon perusteella ja konfiguroi / näyttää vaiheen.

Koosta Listaus 6 seuraavasti:

javac SpinnerDemo.java

Suorita tuloksena oleva sovellus seuraavasti:

java SpinnerDemo

Kuva 19 paljastaa tuloksena olevan käyttöliittymän.

Kuva 19: Napsauta kunkin kiekkoa osoittavia nuolia, kun haluat lisätä / vähentää arvojen läpi

K: Haluan tehdä edellisistä kiekkoista muokattavissa. Kuinka teen tämän tehtävän?

A: Puhelu Spinneron void setEditable (looginen arvo) menetelmä, ohi totta että arvo. Olen luonut toisen version SpinnerDemo näyttää. Katso lähdekoodi tämän artikkelin koodiarkistosta.

K: Kun teen edelliset kiekot muokattavaksi, kirjoita tekstikenttään laittomat merkit (kuten kirjaimet) ja paina Tulla sisään avain, heitetään poikkeus. Poikkeus on java.lang.NumberFormatException kokonaislukupyörälle ja java.lang.RuntimeException (kääriminen java.text.ParseException) kaksinkertaisen tarkkuuden kelluvalle kiekolle. Kuinka voin estää tämän poikkeuksen heittämisen?

A: Voit estää tämän poikkeuksen heittämisen asentamalla tiivistelmän alaluokan esiintymän javafx.util.StringConverter luokka (missä T on tyyppi muunnetaan tai siitä Merkkijono) SpinnerValueFactory muunnin. Tämä esine huomaa, että poikkeus heitetään, ja ryhtyy toimiin.

Spinner käyttää a javafx.scene.control.TextField objekti editorina käyttäjän syötteen saamiseksi. Koska tekstikenttään voi tallentaa minkä tahansa merkin, sopimattomia merkkejä, kuten kirjaimia, voidaan kirjoittaa numeerisessa kontekstissa. Kun käyttäjä painaa Tulla sisään, tulo välitetään SpinnerValueFactory muuntimet T fromString (merkkijono) menetelmä. Luku- tai kaksitarkkuuksisten liukulukutehtaiden osalta T on joko Kokonaisluku tai Kaksinkertainen. Muuntaminen laittomista merkeistä merkkijonosta numeroksi johtaa poikkeuksen heittämiseen fromString (). Hanki viite nykyiseen muuntimeen ja asenna uusi muunnin, jonka fromString () menetelmä kutsuu muut muuntimet fromString () menetelmä a yrittää lausunto asianmukaisella saada kiinni lohko. Listaus 7 esittää sovelluksen, joka suorittaa tämän tehtävän.

Listaus 7. SpinnerDemo.java (versio 3)

tuo javafx.application.Application; tuo javafx.geometry.Insets; tuo javafx.scene.Scene; tuo javafx.scene.control.Label; tuo javafx.scene.control.Spinner; tuo javafx.scene.layout.GridPane; tuo javafx.stage.Stage; tuo javafx.util.StringConverter; public class SpinnerDemo laajentaa sovellusta {@Override public void start (Stage primaryStage) {Spinner ispinner = uusi kiekko (1, 10, 2); ispinner.setEditable (true); StringConverter sci = ispinner.getValueFactory (). GetConverter (); StringConverter sci2 = uusi StringConverter () {@Override public Integer fromString (String value) {try {return sci.fromString (value); } catch (NumberFormatException nfe) {System.out.println ("Virheellinen kokonaisluku:" + arvo); paluu 0; }} @Override public String toString (kokonaisluku) {return sci.toString (arvo); }}; ispinner.getValueFactory (). setConverter (sci2); Spinner dspinner = uusi kiekko (1.5, 3.5, 1.5, 0.5); dspinner.setEditable (true); StringConverter scd = dspinner.getValueFactory (). GetConverter (); StringConverter scd2 = uusi StringConverter () {@Override public Double fromString (String value) {yritä {return scd.fromString (arvo); } catch (RuntimeException re) {System.out.println ("Huono kaksinkertainen:" + arvo); System.out.println ("Syy:" + re.getCause ()); paluu 0,0; }} @Override public String toString (Double value) {return scd.toString (arvo); }}; dspinner.getValueFactory (). setConverter (scd2); GridPane ruudukko = new GridPane (); grid.setHgap (10); grid.setVgap (10); grid.setPadding (uudet lisäosat (10)); grid.add (uusi tarra ("Integer Spinner"), 0, 0); grid.add (ispinner, 1, 0); grid.add (uusi tarra ("Double Spinner"), 0, 1); ruudukko. lisää (dspinner, 1, 1); Scene scene = uusi kohtaus (ruudukko, 350, 100); primaryStage.setTitle ("SpinnerDemo"); primaryStage.setScene (kohtaus); primaryStage.show (); }}

Koosta luettelo 7 (javac SpinnerDemo.java) ja suorita tuloksena oleva sovellus (java SpinnerDemo). Sinun tulee noudattaa alla olevia virheilmoituksia, kun kirjoitat laittomia merkkejä kehruun tekstikenttään:

Virheellinen kokonaisluku: a2 Huono kaksoisnapsauta: b1.5 Syy: java.text.ParseException: Palamaton numero: "b1.5"

K: Tarvitsen merkkijonopohjaisen kiekon. Kuinka saan sellaisen?

A: Voit hankkia merkkijonopohjaisen kiekon Spinner (ObservableList-kohteet) rakentaja. Esimerkiksi seuraava koodinpätkä kertoo kuinka luodaan kiekko viikonpäivän nimen valitsemiseksi:

Lista weekDays = Arrays.asList ("maanantai", "tiistai", "keskiviikko", "torstai", "perjantai", "lauantai", "sunnuntai"); ObservableList obsWeekDays = FXCollections.observableList (weekDays); Spinner sspinner = uusi kiekko (obsWeekDays);

Otin tämän koodin fragmentin SpinnerDemo sovellus (katso lähdekoodi tämän artikkelin koodiarkistosta). Kun suoritat sovelluksen, näet kiekon, joka on esitetty kuvassa 20.

Kuva 20: Yritetään kirjoittaa tekstiä editoriin, joka ei tarkalleen vastaa yhtä viikonpäivän nimistä java.lang.UnsupportedOperationException heitetään

K: Voitteko antaa minulle lisätietoja JavaFX: n tuesta spinnereille?

A: Tutustu JavaFX 8 -oppaaseen Spinner ja SpinnerValueFactory lisätietoja tästä ohjaimesta ja sen mallista. Voit myös suorittaa Google-haun saadaksesi selville, miten muut käyttävät tätä hallintalaitetta.

Tekstin muotoilu

K: Kuinka JavaFX tukee tekstin muotoilua?

A: JavaFX tukee tekstin muotoilua tarjoamalla javafx.scene.control.TextFormatter luokka sisäkkäin Muuttaa luokassa. Lisäksi abstrakti javafx.scene.control.TextInputControl luokka (vanhempien luokka) Tekstikenttä ja javafx.scene.control.TextArea) on annettu a textFormatter ominaisuus niin, että mikä tahansa alaluokka tukee automaattisesti tekstin muotoilua.

K: Millaisia ​​tekstin muotoiluja tuetaan?

A:TextFormatter tukee kahdenlaisia ​​tekstimuotoiluja: arvo ja muutos. A arvon muotoilija kutsutaan, kun painat Tulla sisään -näppäintä tekstin kirjoittamisen jälkeen. A muuta muotoilijaa kutsutaan jokaiselle tekstin poisto-, lisäys- ja korvausmuutokselle kohdennettua tekstinsyötön ohjausta varten. Näitä muotoilijoita voidaan käyttää erikseen tai yhdessä.

K: Kuinka arvon ja muutoksen muotoilijat määritetään?