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) {}
 
}