Et grafisk brukergrensesnitt (GUI) bygget ved hjelp av Java NetBeans plattform består av flere lag med containere. Det første laget er vinduet som brukes til å flytte applikasjonen rundt på datamaskinens skjerm. Dette er kjent som toppnivåcontaineren, og jobben er å gi alle andre containere og grafiske komponenter et sted å jobbe i. Vanligvis for en stasjonær applikasjon, vil denne beholderen på toppnivå lages ved hjelp av
klasse.
Du kan legge til et hvilket som helst antall lag i GUI-designen, avhengig av kompleksiteten. Du kan plassere grafiske komponenter (f.eks. Tekstbokser, etiketter, knapper) direkte i
, eller du kan gruppere dem i andre containere.
Lagene i GUI er kjent som inneslutningshierarkiet og kan sees på som et slektstre. Hvis
sitter bestefaren på toppen, så kan den neste beholderen tenkes på som faren og komponentene den har som barna.
For dette eksemplet bygger vi en GUI med en
som inneholder to
og
. Den første
vil holde en
og
. Den andre
vil holde en
og
. Bare en
(og derav de grafiske komponentene den inneholder) vil være synlige om gangen. Knappen brukes til å endre synligheten til de to
.
Det er to måter å bygge denne GUI ved hjelp av NetBeans. Den første er å skrive inn Java-koden som representerer GUI manuelt, som er omtalt i denne artikkelen. Det andre er å bruke NetBeans GUI Builder-verktøyet for å bygge Swing GUIer.
For informasjon om hvordan du bruker JavaFX snarere enn Swing for å opprette en GUI, se Hva er JavaFX?
Merk: Den komplette koden for dette prosjektet er kl Eksempel på Java-kode for å bygge et enkelt GUI-program.
Sette opp NetBeans-prosjektet
Lage en ny Java Søknadsprosjekt i NetBeans med en hovedklasse Vi kaller prosjektet
Sjekk punkt: I Prosjekter-vinduet til NetBeans skal være en toppnivå GuiApp1-mappe (hvis navnet ikke er i fet skrift, høyreklikker du på mappen og velger
). Under
mappen skal være en kildepakke mappe med
kalt GuiApp1. Denne mappen inneholder hovedklassen som heter
.java.
Før vi legger til noen Java-kode, legger du følgende import til toppen av
klasse, mellom
linje og
:
Denne importen betyr at alle klassene vi trenger for å lage denne GUI-applikasjonen vil være tilgjengelige for oss å bruke.
Legg til denne kodelinjen innenfor hovedmetoden:
Dette betyr at det første du må gjøre er å lage en ny
gjenstand. Det er en fin snarvei for eksempel programmer, da vi bare trenger en klasse. For at dette skal fungere, trenger vi en konstruktør for
klasse, så legg til en ny metode:
I denne metoden legger vi all Java-koden som er nødvendig for å lage GUI, noe som betyr at hver linje fra nå av vil være inne i
metode.
Design Merk: Du har kanskje sett Java-kode publisert som viser klassen (dvs.
) utvidet fra a
. Denne klassen blir deretter brukt som det viktigste GUI-vinduet for et program. Det er virkelig ikke noe behov for å gjøre dette for en vanlig GUI-applikasjon. Den eneste gangen du ønsker å utvide
klasse er hvis du trenger å lage en mer spesifikk type
(se på
for mer informasjon om hvordan du lager en underklasse).
Som nevnt tidligere, er det første laget av GUI er et applikasjonsvindu laget av en
. Å lage en
objekt, ring
konstruktør:
Deretter setter vi oppførselen til GUI-applikasjonsvinduet ved å bruke disse fire trinnene:
1. Forsikre deg om at applikasjonen lukkes når brukeren lukker vinduet slik at det ikke fortsetter å kjøre ukjent i bakgrunnen:
2. Angi en tittel for vinduet slik at vinduet ikke har en tom tittellinje. Legg til denne linjen:
3. Angi vindusstørrelse, slik at vinduet er størrelse slik at det passer til de grafiske komponentene du plasserer i det.
Design Merk: Et alternativt alternativ for å stille inn størrelsen på vinduet er å ringe til
metode for
klasse. Denne metoden beregner størrelsen på vinduet basert på de grafiske komponentene det inneholder. Fordi dette eksemplet ikke trenger å endre vindusstørrelsen, bruker vi bare
metode.
4. Sentrer vinduet for å vises midt på dataskjermen, slik at det ikke vises øverst til venstre på skjermen:
Legger til de to JPanelene
De to linjene her skaper verdier for
og
gjenstander vi snart skal lage, ved å bruke to
arrays. Dette gjør det lettere å fylle noen eksempler på oppføringer for disse komponentene:
Lag det første JPanel-objektet
La oss lage det første
gjenstand. Den vil inneholde en
og
. Alle tre er laget via konstruktørmetodene deres:
Merknader om de tre linjene ovenfor:
- De
JPanel
variabel er erklært endelig. Dette betyr at variabelen bare kan holdeJPanel
som er opprettet i denne linjen. Resultatet er at vi kan bruke variabelen i en indre klasse. Det vil fremgå hvorfor vi senere vil koden. - De
JLabel
ogJComboBox
har verdier sendt til dem for å angi grafiske egenskaper. Etiketten vil vises som "Frukt:", og combobox vil nå ha verdiene ifruitOptions
rekke erklært tidligere. - De
Legg til()
metode forJPanel
plasserer grafiske komponenter i den. ENJPanel
bruker FlowLayout som standard layout manager. Dette er greit for denne applikasjonen, da vi ønsker at etiketten skal sitte ved siden av combobox. Så lenge vi legger tilJLabel
først vil det se bra ut:
Lag det andre JPanel-objektet
Den andre
følger samme mønster. Vi legger til en
og
og angi verdiene for disse komponentene til å være "Grønnsaker:" og den andre
matrise
. Den eneste andre forskjellen er bruken av
metode for å skjule
. Ikke glem at det vil være en
kontrollere synligheten til de to
. For at dette skal fungere, må man være usynlig i starten. Legg til disse linjene for å sette opp det andre
:
En linje som er verdt å merke seg i koden ovenfor, er bruken av
metode for
. De
verdi gjør at listen viser elementene den inneholder i to kolonner. Dette kalles en "avisstil" og er en fin måte å vise en liste over elementer fremfor en mer tradisjonell vertikal kolonne.
Legge til etterbehandling
Den siste komponenten som trengs er
for å kontrollere synligheten til
s. Verdien som er gitt i
konstruktør setter etikett på knappen:
Dette er den eneste komponenten som vil definere en hendelseslytter. En "hendelse" oppstår når en bruker samhandler med en grafisk komponent. Hvis en bruker for eksempel klikker på en knapp eller skriver tekst i en tekstboks, oppstår en hendelse.
En begivenhetslytter forteller applikasjonen hva de skal gjøre når hendelsen skjer.
bruker klassen ActionListener for å "lytte" for et knappeklikk av brukeren.
Lag hendelseslytteren
Fordi dette programmet utfører en enkel oppgave når du klikker på knappen, kan vi bruke en anonym indre klasse til å definere hendelseslytteren:
Dette kan se ut som skummel kode, men du må bare bryte den ned for å se hva som skjer:
- Først kaller vi
addActionListener
metode forJButton
. Denne metoden forventer en forekomst avAction
klasse, som er klassen som lytter til arrangementet. - Deretter oppretter vi forekomsten av
Action
klasse ved å erklære et nytt objekt ved å brukeny ActionListener ()
og deretter gi en anonym indre klasse - som er all koden i de krøllete parentesene. - Inne i den anonyme indre klassen, legg til en metode som heter
actionPerformed ()
. Dette er metoden som kalles når du klikker på knappen. Alt som trengs i denne metoden er å brukesetVisible ()
for å endre synligheten tilJPanel
s.
Legg til JPanels til JFrame
Til slutt må vi legge til de to
s og
til
. Som standard, a
bruker BorderLayout layout manager. Dette betyr at det er fem områder (over tre rader) av
som kan inneholde en grafisk komponent (NORD, {VEST, SENTRUM, ØST}, SØR). Spesifiser dette området ved å bruke
metode:
Still JFrame til å være synlig
Endelig vil alle ovennevnte koder ha vært for ingenting hvis vi ikke angir
å være synlig:
Nå er vi klare til å kjøre NetBeans-prosjektet for å vise applikasjonsvinduet. Ved å klikke på knappen vil du veksle mellom å vise combobox eller liste.