Sisällysluettelo
GUI
APUA!!! Käy tutustumassa javan API-rajapintoihin osoitteessa http://java.sun.com/products/j2se/1.4.2/docs/api/.
Kun periytetään Frame-luokasta, niin saadaan pitkän polun perästä tavaraa. Kannattaa tutustua niihin etukäteen.
Ja jos/kun tuntuu liian vaikealta, niin katso |tämä.
Ikkuna (frame)
Frame on graafisen käyttöliittymän pohja. Siihen voidaan liittää valikoita, nappeja, labeleita ja kaikkia muita käyttöliittymiin liittyviä vempaimia. Alla oleva koodi luo ikkunan, jonka koko on 300×150. Ikkunassa ei ole muita painikkeita, kuin vakiot pienennys, suurennus ja suljentapainikkeet. Kokeile ohjelmaa.
import java.awt.*; class Testi extends Frame { public void alustus() { setSize(300,150); show(); } public Testi() //konstruktori { super("Testi-ikkuna"); } public static void main(String[] args) { Testi kokeilu = new Testi(); kokeilu.alustus(); } }
Koska painikkeita ei ole ohjelmoitu, niin ne eivät toimi. Eli ainoa keino lopettaa ohjelma on painaa CTRL + C.
Komentonapit, tekstilaatikot, otsikot
Ikkunaan voidaan lisätä nappeja, tekstikenttiä, otsikoita ja muita elementtejä. Katso apin awt:n class summarysta tarkemmat tiedot.
import java.awt.*; class Testi extends Frame { public void alustus() { setSize(300,150); add(new Button("Nappi")); //luodaan nappi add(new TextField(10)); //luodaan tekstikenttä add(new Label("Otsikko")); //luodaan otsikko show(); } public Testi() //konstruktori { super("Testi-ikkuna"); } public static void main(String[] args) { Testi kokeilu = new Testi(); kokeilu.alustus(); } }
Layoutit
Layouteilla hallitaan komponenttien sijoittelua ikkunassa. Edellisessä ohjelmassa kaikki menivät iloisesti päällekkäin ja vain tuorein jäi jäljelle.
Gridlayout
Gridlayout on kaikista yksinkertaisin ja kivoin layout. Se asettaa komponentit ristikkoon ruudulle luontijärjestyksessä. Elementtien järjestys säilyy ikkunan kokoa muutettaessa.
import java.awt.*; public class Layout_esittely extends Frame { Layout_esittely() { super("Layout esittely"); } void go() { setSize(300,150); setLayout(new GridLayout(2,3)); add(new Button("nappi1")); add(new Button("nappi2")); add(new Button("nappi3")); add(new Button("nappi4")); add(new Button("nappi5")); add(new Button("nappi6")); show(); } public static void main(String args[]) { Layout_esittely olio = new Layout_esittely(); olio.go(); } }
Flowlayout
Flowlayoutille ei tarvitse etukäteen kertoa, kuinka monta elementtiä ikkunaan tulee. Se sijoittaa ne jotenkin järjestyksessä näytölle. Järjestys muuttuu ruudun kokoa muutettaessa.
import java.awt.*; public class Layout_esittely extends Frame { Layout_esittely() { super("Layout esittely"); } void go() { setSize(300,150); setLayout(new FlowLayout()); add(new Button("nappi1")); add(new Button("nappi2")); add(new Button("nappi3")); add(new Button("nappi4")); add(new Button("nappi5")); add(new Button("nappi6")); show(); } public static void main(String args[]) { Layout_esittely olio = new Layout_esittely(); olio.go(); } }
Borderlayout
BorderLayoutissa kerrotaan, mihin elementti halutaan sijoittaa. Koska sijoittelu voidaan tehdä vain viiteen paikkaan, niin kuudes nappi menee keskellä olevan napin päälle.
import java.awt.*; public class Layout_esittely extends Frame { Layout_esittely() { super("Layout esittely"); } void go() { setSize(300,150); setLayout(new BorderLayout()); add(new Button("nappi1"), BorderLayout.NORTH); add(new Button("nappi2"), BorderLayout.EAST); add(new Button("nappi3"), BorderLayout.CENTER); add(new Button("nappi4"), BorderLayout.WEST); add(new Button("nappi5"), BorderLayout.SOUTH); add(new Button("nappi6")); show(); } public static void main(String args[]) { Layout_esittely olio = new Layout_esittely(); olio.go(); } }
Päällekkäin meneminen voidaan estää sijoittamalla keskelle paneeli, johon voidaan sijoittaa kaksi nappia. Lisäksi napit kannattaa nimetä, jotta tapahtumankäsittely olisi helpompaa.
import java.awt.*; public class Layout_esittely extends Frame { Layout_esittely() { super("Layout esittely"); } void go() { Button nappi1 = new Button("nappi1"); Button nappi2 = new Button("nappi2"); Button nappi3 = new Button("nappi3"); Button nappi4 = new Button("nappi4"); Button nappi5 = new Button("nappi5"); Button nappi6 = new Button("nappi6"); Panel paneeli = new Panel(); paneeli.setLayout(new GridLayout(2,1)); setSize(300,150); setLayout(new BorderLayout()); add((nappi1), BorderLayout.NORTH); add((nappi2), BorderLayout.EAST); add((paneeli), BorderLayout.CENTER); add((nappi4), BorderLayout.WEST); add((nappi5), BorderLayout.SOUTH); paneeli.add(nappi3); paneeli.add(nappi6); show(); } public static void main(String args[]) { Layout_esittely olio = new Layout_esittely(); olio.go(); } }
Tapahtumankäsittely
Nappien (tms) painallukset saadaan käsittelyyn lisäämällä nappiin vakoilija, joka seuraa koko ajan napin tapahtumia. Eli käytännössä toteutetaan java.awt.event luokan ActionListener rajapinta. Kun jotain tapahtuu, niin mennään ActionPerformed metodiin. Sinne voidaan laittaa tapahtumaan liittyvää koodia.
import java.awt.*; import java.awt.event.*; public class Tapahtuma extends Frame implements ActionListener { Tapahtuma() { super("Layout esittely"); } void go() { Button nappi1 = new Button("nappi1"); setSize(300,150); add(nappi1); nappi1.addActionListener(this); //Lisätään se vakoilija show(); } public void actionPerformed(ActionEvent tapaus) { if(tapaus.getActionCommand().equals("nappi1")) { System.out.println("Se oli nappi! JIPPII!!!"); } } public static void main(String args[]) { Tapahtuma olio = new Tapahtuma(); olio.go(); } }
import java.awt.*; import java.awt.event.*; public class Tapahtuma extends Frame implements ActionListener, WindowListener { Tapahtuma() { super("Layout esittely"); } void go() { Button nappi1 = new Button("nappi1"); setSize(300,150); add(nappi1); nappi1.addActionListener(this); //Lis嵤宠se vakoilija addWindowListener(this); show(); } public void actionPerformed(ActionEvent tapaus) { if(tapaus.getActionCommand().equals("nappi1")) { System.out.println("Se oli nappi! JIPPII!!!"); } } public static void main(String args[]) { Tapahtuma olio = new Tapahtuma(); olio.go(); } public void windowClosing(WindowEvent e) { dispose(); System.exit(0); } public void windowOpened(WindowEvent e) {} public void windowActivated(WindowEvent e) {} public void windowIconified(WindowEvent e) {} public void windowDeiconified(WindowEvent e) {} public void windowDeactivated(WindowEvent e) {} public void windowClosed(WindowEvent e) {} }







