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!