Luffe_ Skrevet 10. mai 2002 Del Skrevet 10. mai 2002 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
MailMan13 Skrevet 10. mai 2002 Del Skrevet 10. mai 2002 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
Luffe_ Skrevet 10. mai 2002 Forfatter Del Skrevet 10. mai 2002 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
A_N_K Skrevet 11. mai 2002 Del Skrevet 11. mai 2002 Kan du ikke bare sette teksten i feltene til "", du har jo gjort det lenger opp i koden, hver gang kundeknappen blir trykket? Da setter du jo eksplisitt teksten til blank. Lenke til kommentar
Luffe_ Skrevet 11. mai 2002 Forfatter Del Skrevet 11. mai 2002 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
A_N_K Skrevet 11. mai 2002 Del Skrevet 11. mai 2002 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
Luffe_ Skrevet 11. mai 2002 Forfatter Del Skrevet 11. mai 2002 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
A_N_K Skrevet 11. mai 2002 Del Skrevet 11. mai 2002 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
MailMan13 Skrevet 12. mai 2002 Del Skrevet 12. mai 2002 Hvis du setter 'mittKundePanel=null;' har du ikke noe referanse til objektet, da vil java selv finne ut at du ikke ønsker å bruke objektet lenger (automatisk garbage collector), så kan du sette 'mittKundePanel=new KundePanel();, det skal funke. Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå