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; } }
Aihe on jo aika vanha, joten et voi enää vastata siihen.