Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: Java: Luokan instanssien lisääminen vektoriin

Mobel [26.01.2008 00:00:00]

#

Tässä appletissa käyttäjä voi lisätä Auto-luokan instansseja teoriassa rajattoman määrän vektoriin ja asettaa auton ominaisuudet haluamikseen.

Idean kannalta tärkein vaihe tapahtuu addAuto()-metodissa, jossa asetetaan käyttäjän määräämät ominaisuudet autolle, ja uusi instanssi luodaan.

Samalla esitellään yleisimpien käyttöliittymäkomponenttien käyttöä ja niiden toimintaa. Käyttöliittymä ei ole se selkein, mutta ajanee asiansa. Ensin vektoriin lisätään haluttu määrä "auotja" vasemman laidan painikkeilla, ja sen jälkeen instanssien sisältöä voi tarkastella selailemalla vektoria "Edellinen"- ja "Seuraava"-napeilla.

Toimiva appletti löytyy täältä: http://user.personal.fi/atk/Kaakeliuuni/Fileet/Luokan%20lis%e4%e4minen%20vektoriin/VektorivinkkiGUI1200778171547.html

import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Vector;

//tehdään appletti, jossa on tapahtumankuuntelija buttoneille
public class VektorivinkkiGUI extends Applet implements ActionListener{

	int vektorinKohta=0; //muuttuja, joka sisältää vektorin solun numeron, jota selataan
	int autojaVektorissa=0; // kuinka monta instanssia Auto-luokasta on vektorissa
	public int omistajienMäärä=0; //laskee montako omistajaa autolla on ollut. koska se on public, muutkin luokat voivat sitä //tutkia

	Vector<Auto> autoVektori = new Vector<Auto>(); //vektori, johon autoja lisätään
	Queue<String> omistajaJono = new LinkedList<String>(); //jono omistajille

	TextArea autonTiedot=new TextArea(); //tekstilaatikko, johon teidot autosta tulostetaan

	TextField syötäMerkki=new TextField(); //kenttä, johon syötetään auton merkki
	TextField syötäMalli=new TextField(); //kenttä, johon syötetään auton malli
	TextField syötäOmistaja=new TextField(); //kenttä, johon syötetään auton omistaja

	Choice vuosiLista=new Choice(); //lista, josta voi valita vuosimallin

	Button lisääAuto=new Button("Lisää auto"); //nappi, jolla lisätään auto vektoriin
	Button lisääOmistaja=new Button("Lisää omistaja"); //nappi, jolla lisätään omistaja luetteloon
	Button seuraava=new Button("Seuraava"); //liikkuu vektorin seuraavaan soluun
	Button edellinen=new Button("Edellinen"); //liikkuu vektorin edelliseen soluun
	Button tarkista=new Button("Tarkista solu :"+vektorinKohta); //tarkistetaan vektorin kohta

	//laitetaan radionapit samaan ryhmään
	CheckboxGroup polttoaine=new CheckboxGroup();
	Checkbox bensa=new Checkbox("Bensa", polttoaine, true);
	Checkbox diesel=new Checkbox("Diesel", polttoaine, false);


	public void init(){ //alustetaan appletti
		this.setSize(400, 300); //appletin koko

		//lisätään tekstikentät
		add(autonTiedot);
		add(syötäMerkki);
		add(syötäMalli);
		add(syötäOmistaja);

		//laitetaan vihjetekstit paikalleen
		syötäMerkki.setText("Merkki");
		syötäMalli.setText("Malli");
		syötäOmistaja.setText("Omistaja");

		//lisätään napit ja niille kuuntelijat
		add(lisääAuto);
		lisääAuto.addActionListener(this);
		add(lisääOmistaja);
		lisääOmistaja.addActionListener(this);
		add(seuraava);
		seuraava.addActionListener(this);
		add(edellinen);
		edellinen.addActionListener(this);
		add(tarkista);
		tarkista.addActionListener(this);

		//lisätään radionapit ja laitetaan ne samaan ryhmään
		add(bensa);
		add(diesel);

		//lisätään lista ja sen vaihtoehdot
		vuosiLista.add("2000");
		vuosiLista.add("1990");
		vuosiLista.add("1980");
		vuosiLista.add("1970");
		vuosiLista.add("1960");
		add(vuosiLista);


	}

	public void paint(Graphics g){
		g.drawString("Autoja vektorissa "+autojaVektorissa, 5, 40);
		//asetetaan paikat ja koot käyttöliittymän objekteille
		//tekstikentät
		autonTiedot.setBounds(120, 50, 275, 225);

		syötäMerkki.setBounds(10, 50, 85, 20);
		syötäMalli.setBounds(10, 80, 85, 20);
		syötäOmistaja.setBounds(10, 110, 85, 20);

		//radionapit
		g.drawString("Polttoaine", 10, 180);
		bensa.setBounds(20, 183, 80, 15);
		diesel.setBounds(20, 198, 80, 15);

		//lista
		g.drawString("Vuosikymmen", 10, 230);
		vuosiLista.setBounds(20, 238, 75, 15);

		//nappien paikat
		lisääOmistaja.setBounds(10, 135, 88, 20);
		lisääAuto.setBounds(10, 265, 88, 30);
		seuraava.setBounds(310, 280, 60, 20);
		edellinen.setBounds(240, 280, 60, 20);

		//tarkista-napille muutetaan teksti
		tarkista.setLabel("Tarkista solu: "+vektorinKohta);
		tarkista.setBounds(120, 280, 100, 20);

	}

	public void actionPerformed(ActionEvent tapahtuma) { //kutsutaan aina kun nappia painetaan
		if(tapahtuma.getActionCommand().equals("Lisää auto")){ //jos painettiin Lisää auto-nappia...
			addAuto(); //kutsutaan addAuto()-metodia, joka lisää auton vektoriin
			//laitetaan vihjetekstit takaisin
			syötäMerkki.setText("Uusi merkki");
			syötäMalli.setText("Uusi malli");
			syötäOmistaja.setText("Uusi omistaja");

			repaint(); //jotta muutokset näkyvät, piirretään näyttö uudelleen
		}
		if(tapahtuma.getActionCommand().equals("Lisää omistaja")){ //jos painettiin Lisää auto-nappia...
			omistajienMäärä++;
			omistajaJono.add(syötäOmistaja.getText()); //...lisätään omistaja syöttökentästä jonoon
			syötäOmistaja.setText("Uusi omistaja");
			repaint();
		}

		if(tapahtuma.getActionCommand().equals("Seuraava")){
			//estetään vektorin rajojen yli meno
			if(vektorinKohta>=autoVektori.size()){
				vektorinKohta=autoVektori.size();
			}
			else{
				vektorinKohta++;
			}
			repaint();
		}

		if(tapahtuma.getActionCommand().equals("Edellinen")){
			//estetään vektorin rajojen yli meno
			if(vektorinKohta<=0){
				vektorinKohta=0;
			}
			else{
				vektorinKohta--;
			}
			repaint();
		}

		if(tapahtuma.getActionCommand().startsWith("Tarkista solu: ")){ //jos napin teksti alkaa "Tarkista solu " merkkijonolla //tehdään seuraava:
			//asetetaan tekstikenttään tiedot
			autonTiedot.setText("Merkki: " +
					autoVektori.get(vektorinKohta).getMerkki() + "\nMalli: "+
					autoVektori.get(vektorinKohta).getMalli()+"\nOmistajat:\n"+
					autoVektori.get(vektorinKohta).getOmistajat()+"\nPolttoaine: "+
					autoVektori.get(vektorinKohta).getPolttoaine()+ "\nVuosikymmen: "+
					autoVektori.get(vektorinKohta).getVMalli());
			repaint();
		}
	}


	public void addAuto(){
		autojaVektorissa++;
		//luodaan Auto-luokasta uusi instanssi ja lisätään se vektoriin
		Auto kaara=new Auto();
		autoVektori.add(kaara);

		//asetetaan ominaisuudet kohdalleen
		kaara.setMerkki(syötäMerkki.getText());
		kaara.setMalli(syötäMalli.getText());
		kaara.setVMalli(vuosiLista.getSelectedItem());
		if(bensa.getState()==true){
			kaara.setPolttoaine(true);
		}
		else{
			kaara.setPolttoaine(false);
		}
		while(omistajaJono.peek()!=null){
			kaara.setOmistajat(omistajaJono.remove().toString()); //lisätään omistajia niin kauan kun omistajaJonosta löytyy //jotain
		}
		repaint();
	}
}
public class Auto {

	String merkki, malli, vMalli, omistaja;
	boolean onBensa;

	//auton merkin asetus ja palautus
	public void setMerkki(String autonMerkki){
		merkki=autonMerkki;
	}
	public String getMerkki(){
		return merkki;
	}

	//auton mallin asetus ja palautus
	public void setMalli(String autonMalli){
		malli=autonMalli;
	}
	public String getMalli(){
		return malli;
	}

	//auton vuosimallin asetus ja palautus
	public void setVMalli(String autonVMalli){
		vMalli=autonVMalli;
	}
	public String getVMalli(){
		return vMalli;
	}

	//auton polttoainetyypin asetus ja palautus
	public void setPolttoaine(boolean autoOnBensa){
		onBensa=autoOnBensa;
	}
	public String getPolttoaine(){
		if(onBensa==true){
			return "bensiini";
		}

		else{
			return "diesel";
		}

	}

	//omistajien palautus ja asetus
	public void setOmistajat(String nimi){
		omistaja=omistaja+"   -"+nimi+"\n";
	}

	public String getOmistajat(){
		return omistaja;
	}

}

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta