[ tozaaa @ 04.04.2010. 18:10 ] @
Imam aplikaciju koja ima 5 prozora (JFrame). U svakom od tih prozora napravio sam JMeni preko koga moze da se otvori jedan od drugih prozora i istovremeno zatvori postojeci. Takvim pristupom dolazi do ponavljanja JMeni koda u svakoj JFrame klasi. Zbog toga sam napravio zasebnu klasu "Meni" koja extends JMeniBar. package client; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import java.awt.event.ActionEvent; public class Meni extends JMenuBar{ JMenu menu; JMenuItem menuItem; private boolean obradaPacijenti; private boolean istorijaPacijenata; private boolean raspored; private boolean materijal; private boolean usluge; public Meni(boolean obradaPacijenti, boolean istorijaPacijenata, boolean raspored, boolean materijal, boolean usluge ){ this.obradaPacijenti=obradaPacijenti; this.istorijaPacijenata=istorijaPacijenata; this.raspored=raspored; this.materijal=materijal; this.usluge=usluge; dodajMeni(); } public void dodajMeni(){ menu=new JMenu("Opcije"); this.add(menu); if(raspored){ menuItem=new JMenuItem("Raspored", KeyEvent.VK_R); menuItem.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent d){ try{ new PanelRaspored().setVisible(true); }catch(Exception b){}; // pre je ovde bilo dispose() ali u ovom slucaj ne moze } }); menu.add(menuItem); } if(istorijaPacijenata){ menuItem=new JMenuItem("Istorija", KeyEvent.VK_I); menuItem.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent d){ int jmbr=0; try{ // jmbr=(Integer)jtabla.getValueAt(jtabla.getSelectedRow(), 0); }catch(Exception bb){JOptionPane.showMessageDialog(null, "Morate da odaberete pacijenta");} try{ new IstorijaPacijenta(jmbr, false).setVisible(true); // pre je ovde bilo dispose() ali u ovom slucaj ne moze }catch(Exception b){System.out.println(b);} } }); menu.add(menuItem); } if(materijal){ menuItem=new JMenuItem("Materijal", KeyEvent.VK_M); menuItem.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent d){ try{ new UnosMaterijal().setVisible(true); }catch(Exception b){} // pre je ovde bilo dispose() ali u ovom slucaj ne moze } }); menu.add(menuItem); } if(usluge){ menuItem=new JMenuItem("Usluge", KeyEvent.VK_U); menuItem.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent d){ try{ new UnosUsluge().setVisible(true); }catch(Exception b){} // pre je ovde bilo dispose() ali u ovom slucaj ne moze } }); menu.add(menuItem); } menuItem=new JMenuItem("Exit", KeyEvent.VK_X); menuItem.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent d){ // pre je ovde bilo dispose() ali u ovom slucaj ne moze } }); menu.add(menuItem); } } Sad je dovoljno da svaka klasa JFrame definise Meni u dva reda i nema ponavljanja celog ovog koda iznad u svakoj klasi. public class ObradaPacijenti extends JFrame implements ComponentListener{ public ObradaPacijenti(int JMBR, boolean noviPac) throws Exception { .... Meni meni=new Meni(false, true, true, true, true); setJMenuBar(meni); .... I sve bi to radilo super da nemam sledeci problem. Problem koji ne znam da resim jeste kad objekat "Meni" otvara novi, kako da zatvorim postojeci JFrame. Molim za pomoc! |