Gå til innhold

Sikkert et enkelt spøsmål for de som kan det


Anbefalte innlegg

Hei

 

Jeg har sittet og leiket litt med java programmering og nå har jeg støtt på et problem. Jeg har laget et enkelt program der du skal kunne registrere en kunde og registrere en vare samt registrere et nytt salg (ikke tatt med enda). Jeg har laget en hovedside GUI som bare har knappene nederst på skjermen. Deretter har jeg to paneler som lager GUI-en til ny kunde og ny vare. Til slutt har jeg en egen klasse som skal lytte på når bruker trykker på kunde og vare knappen.

 

Problemet mitt blir når jeg har trykket på ny kunde og skriver inn informasjon. Hvis jeg da ønsker å registrere enda en ny kunde går ikke teksten i feltet bort. Det ser ut som teksten er borte, men når man tar å merker feltet ser man at det fortsatt er tekst i feltet. Hvordan kan jeg da fjerne denne teksten for hver gang en knapp blir trykket.

 

Vet ikke hvor god jeg var til å forklare, men koden kommer nedenfor.( har tatt bort alt som ikke er essensielt)

Håper på noen smarte tilbakemeldinger

 

GUI.java

public GUI()

{

Hendelse h = new Hendelse(this);

c = getContentPane();

c.setLayout(new BorderLayout() );

 

button = new JPanel();

button.setLayout(new GridLayout(1,3) );

 

kunde = new JButton("Ny kunde");

kunde.addActionListener(h);

salg = new JButton("Registrer salg");

vare = new JButton("Ny vare");

vare.addActionListener(h);

 

button.add(kunde);

button.add(salg);

button.add(vare);

 

c.add("South", button);

 

setSize(400,300);

show();

}

 

Kunde.java

public Kunde()

{

setLayout(new BorderLayout() );

 

tekst = new JPanel();

tekst.setLayout(new GridLayout(3,2) );

 

navn = new JLabel("Navn");

adresse = new JLabel("Adresse");

telefon = new JLabel("Telefon");

 

navn_i = new JTextField();

adresse_i = new JTextField();

telefon_i = new JTextField();

navn_i.setText("");

adresse_i.setText("");

tekst.add(navn);

tekst.add(navn_i);

tekst.add(adresse);

tekst.add(adresse_i);

tekst.add(telefon);

tekst.add(telefon_i);

 

add("North", tekst);

}

 

Vare.java

Helt lik som kunde.java bare med andre tekstfelter

 

Hendelse.java

public Hendelse(GUI g)

{

grensesnitt = g;

}

 

public void actionPerformed(ActionEvent e)

{

if(e.getSource() == grensesnitt.kunde)

{

grensesnitt.c.add("North", new Kunde());

 

grensesnitt.c.validate();

}

 

else if(e.getSource() == grensesnitt.vare)

{

grensesnitt.c.add("North", new Vare());

grensesnitt.c.validate();

}

}

 

Dette innlegget ble litt langt, får håpe noen gidder å lese det da

PS! Hvordan får man til innrykk når man poster et spørsmål ?

 

 

 

[ Denne Melding var redigert av: Luffe_ på 2002-05-10 17:24 ]

Lenke til kommentar
Videoannonse
Annonse

For å få riktig innrykk skriver du koden din mellom

 <kildekode her>

 

Svar på spørsmål:

 

Nå vet ikke jeg hvordan klassehierarkiet ditt ser ut, men du kan jo jukse det til med 'mittTextField.setText(null);' i actionListener klassen din.

 

En annen løsning kan være å opprette et nytt 'kunde'-panel hver gang du registrerer input.

Lenke til kommentar

Hei

 

Takker for forslagene

 

Jeg har prøvd det første alternativet.

Jeg opprettet et objekt av klassen kunde

Kunde k = new Kunde()

 

Da får jeg i teorien tilgang til tekstfeltene, men når jeg prøver å nulle ut disse fungerer det ikke.

Teksten står der fortsatt.

 

Det andre alternativet er jeg ikke sikker på om jeg skjønner helt. Jeg oppretter et objekt hver gang jeg trykker på kunde knappen (jeg trodde ihvertfall at jeg gjorde dette :smile: ). Kan du forklare hva du mente der ? Som du sikkert skjønner så er jeg ikke akkurat noen ekspert på dette

Lenke til kommentar

Hei

 

Det er nettop det som er så rart. For det fungerer rett og slett ikke, feltene blir ikke null stillt. Jeg har ikke vært borti dette problemet før så jeg trodde kanskje at jeg måtte gjøre noe mer for å få det nullstilt. Men dere mener altså at dette skal fungere ?

Lenke til kommentar

Altså, etter min mening var koden din litt rotete (eller uvant), men nå har jeg satt meg ned og sett litt nærmere på den. Så vidt jeg kan se instantierer du et nytt objekt av kunde hver gang du trykker på kundeknappen, og adder det til GUI'et? Forsvinner da det forrige objektet fra GUI'et, eller blir det bare liggende under det nye? Når du da markerer tekstfeltet, kanskje du markerer tekstfeltet til det gamle objektet? Jeg tror det ville vært mye smartere å separere kundelogikken fra GUI'et i alle fall. Ha en felles GUI-modell for alle kundeobjekter.

 

[ Denne Melding var redigert av: A_N_K på 2002-05-11 14:26 ]

Lenke til kommentar

Jeg er nok enig med deg i den teorien om at det kan være det gamle objektet som ligger under det nye. Og dermed vises det gamle objektet.

 

Jeg mente at jeg hadde delt det opp ganske bra, med kunde klasse og GUI klasse, men hvordan mener du at jeg skal separere logikken ?(Tror aldri jeg har vært borti den problemstillingen før). Det med at koden var uryddig er godt mulig, har du noen tips om hva jeg ikke burde gjøre ?

Lenke til kommentar

Det jeg mener er at du har en egen klasse (extends JPanel), som tjener som GUI for kunde. Dermed har du bare ett objekt av denne sorten, istedenfor et panel for hvert eneste kundeobjekt. Dette er en vanlig framgangsmåte, og må da også være langt mer effektivt.

Og hvordan skal Java vite at du ønsker å fjerne tidligere komponenter, når du plasserer et nytt (du destruerer jo ikke objektet, så panelet eksisterer videre)? Meg bekjent må dette gjøres manuelt.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...