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.