21. oktober 2003 - 17:02Der er
40 kommentarer og 1 løsning
Opdatering af GUI
Hej
Jeg har lavet et program hvor der der 3 vinduer alle JFrames - I hovedvinduet er der en liste med navne. Man kan bevæge sig til et persondata vindue hvor det blandt andet er muligt at slette et af navnene i en tilsvarende liste. I persondata vinduet kan jeg godt få fjernet navnet umiddelbart efter jeg har trykket slet, men jeg kan sgu ikke finde ud af at få listen i hovedvindue opdateret så navnet også forsvinder her.
Muligvis behøver du ikek selv kode det helt fra scratch.
Hvis du bruger JList/JTable og du har en referance til den bagvedliggende data struktur og du kan kalde fire-et-eller-andet, så skulle den være hjemme.
Typisk vil du vel kalde constructor til din persondata frame med en referance til hoved frame, så kan du i persondata frame kalde en public metode i hoved frame som kalder remove på den list.
Det jeg gør er som følger: I mit personData vindue har jeg en actionListener på en knap ActionListener Slet = new ActionListener () { public void actionPerformed(ActionEvent e) { int t = list1.getSelectedIndex(); hv.gh.sletSpiller(t); hv.gh.save(); list1.remove(t); hv.list1.remove(t); } }; list1.remove(t) fjerner den fra personData listen, og min mening er da at hv.list1.remove(t) skal fjerne den fra hovedvinduets liste som desværre hedder det samme - men nåh ja det er jo ligegyldigt
hv er rigtigt mit hovedvindue, men i mit personData vindue starter jeg med at lave Hovedvindue hv = new Hovedvindue(). Det betyder jo at det er denne instans der bliver repaintet ikke sandt og ikke den der kører i forvejen
Det gør den ikke - Det jeg mener er at hv jo er en referance til en instans variabel jeg har lavet øverts i personData vinduet som vist herunder
public class PersonData extends JFrame {
Hovedvindue hv = new Hovedvindue();
List list1 = new List(); JButton rediger = new JButton(); JButton slet = new JButton(); osv.
senere kommer så ActionListener Slet = new ActionListener () { public void actionPerformed(ActionEvent e) { int t = list1.getSelectedIndex(); hv.gh.sletSpiller(t); hv.gh.save(); list1.remove(t); hv.list1.remove(t); } }; og det er her jeg mener at hv jo refererer til min instans variabel og ikke det hovedvindue der i forvejen er åben
Om jeg har en seperat actionListener klasse mener jeg ikke. Mine actionListener er lavet efter min instansvariabler på følgende måde: ActionListener PersonData = new ActionListener () { public void actionPerformed(ActionEvent e) { PersonData personData = new PersonData(hv); personData.setSize(410,480); personData.setVisible(true); } };
Så hvor vil du have jeg skal putte Hovedvindue ind i den?
Den med at snyde kan jeg faktisk ikke få til at virke. Compilerfejl - får <identifier> expected når jeg laver PersonData personData = new PersonData(this); personData.setVisible(false);
udenfor actionListeneren - fatter jeg faktisk ikke helt
public class Hovedvindue extends JFrame //implements Observer {
public static final GemHent gh = new GemHent();
JLabel spillere = new JLabel(); JLabel antalBaner = new JLabel(); List list1 = new List(); JComboBox comboBaner = new JComboBox(); //snip JButton personData = new JButton(); PersonData personData = new PersonData(this); personData.setVisible(false);
ActionListener PersonData = new ActionListener () { public void actionPerformed(ActionEvent e) { //PersonData personData = new PersonData(); personData.setSize(410,480); personData.setVisible(true); } };
Perfekt - nu kører det pointene er dine - men inden du får dem. Du skrev tidligere at det jo er at snyde og at du ville se om du kunne finde ud af hvordan man finder owner instansen af outer klassen i en instans af en anonym inner class. Mener du stadig det??? :o)
Det pæneste vil være at droppe den anonyme indre klasse og lave en ganske normal klasse med en constructor som tager et HovedVindue som argument og gemmer det i et instans medlem, som så kan bruges af actionPerformed.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.