09. maj 2007 - 11:08Der er
13 kommentarer og 2 løsninger
Invoke method i Jframe når JDialog lukkes
Jeg står med det problem, at jeg har en JFrame hvorfra der er en knap der åbner en JDialog, med en række felter og 2 knapper. Trykker man på den ene knap i den JDialog, skal JFramen opfange dette tryk og køre en metode.
Ved godt det er en listener jeg skal have smidt på, men hvordan skal den lige klares? Nogen der evt. har et eksempel jeg kan se på?
Det du gør er at du lader den klasse som skal reagere på trykket på knappen, arve fra actionlistener, og så sender du den klasse med over til der hvor knappen er og skriver
knap.addActionListener(klasse);
så skal du bare lave actionperformed i den klasse som du arvede actionListener fra.
Mikkelbm -> Nej, det hedder den heller ikke - det var bare lige her i denne repræsentation af min kode, at jeg valgte at kalde den JFrame så det var nemt at se hvilken klasse der var hvad :)
Altså der skal ikke sendes nogle data med i kaldet til hoved-framen. Den skal bare køre en metode jeg har i hovedframen der hedder refreshTable().
Scenariet er det, at jeg har en program til håndtering af studerende i en database. Der har jeg en hovedframe med et GUI-interface og et JTable med en liste af studerende, hentet fra DB. Dertil en række knapper, f.eks. "Tilføj" der åbner en JDialog hvor man tilføjer en ny studerende. Når man trykker tilføj i det vindue, skal min JTable opdateres, dertil funktionen refreshTable() i min hovedframe.
Ved ikke lige hvorfor det ikke virkede før, men nu virker det - med den pseudo-kode jeg har :) Mikkelbm, siden din kommentar førte mig til løsningen, kan du smide et svar og få lidt point ...
class MainFrameController implements ActionListener{
public MainFrameController(){ MainFrame frame = new MainFrame(this); mainFrame.setVisible(true); }
public void actionPerformed(ActionEvent evt){ if(((JButton)evt.getSource).getName().equals("frameOk"){ //performOk(); } else if ((JButton)evt.getSource).getName().equals("dialogAdd"){ refreshTable(); //do the rest } } }
class MainFrame extends JFrame{
public MainFrame(ActionListener mainFrameController){ JFrame frame = new JFrame("Students"); //setup layout dialogOk.setName("dialogOk"); dialogOk.addActionListener(mainFrameController); //do more layout things
}
Som du kan se så lader du en controller styre hvad der sker ved tryk på knapper, og så lader du det visuelle stå for sigselv. Det samme gør du med dialog, du kunne f.eks lave en metode i mainFrameController som hed showAddDialog, som så viste JDialog og satte de knapper op som skal bruges der.
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.