[ 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!
[ tozaaa @ 05.04.2010. 13:37 ] @
Resio sam.


Code (java):

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 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(ActionListener parent, 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(parent);
    }

    public void dodajMeni(ActionListener parent){

           menu=new JMenu("Opcije"); this.add(menu);

           if(raspored){
            menuItem=new JMenuItem("Raspored", KeyEvent.VK_R);
            menuItem.addActionListener(parent);
            menuItem.addActionListener(new ActionListener(){
               public void actionPerformed(ActionEvent d){
                  try{                
                   new PanelRaspored().setVisible(true);
                  }catch(Exception b){};      
               }
            });
            menu.add(menuItem);
           }


          if(istorijaPacijenata){

            menuItem=new JMenuItem("Istorija", KeyEvent.VK_I);
            menuItem.addActionListener(parent);
            menu.add(menuItem);
          }


          if(materijal){

            menuItem=new JMenuItem("Materijal", KeyEvent.VK_M);
            menuItem.addActionListener(parent);
            menuItem.addActionListener(new ActionListener(){
               public void actionPerformed(ActionEvent d){
                  try{
                   new UnosMaterijal().setVisible(true);
                  }catch(Exception b){}
               }
            });
            menu.add(menuItem);
          }


          if(usluge){

            menuItem=new JMenuItem("Usluge", KeyEvent.VK_U);
            menuItem.addActionListener(parent);
            menuItem.addActionListener(new ActionListener(){
               public void actionPerformed(ActionEvent d){
                  try{
                   new UnosUsluge().setVisible(true);
                  }catch(Exception b){}
               }

            });
            menu.add(menuItem);
          }


            menuItem=new JMenuItem("Exit", KeyEvent.VK_X);
            menuItem.addActionListener(parent);
            menu.add(menuItem);
           
            }

 
        }
////////////////////////////////////////////////////////////////////////////////////////////



  public class ObradaPacijenti extends JFrame implements ActionListener{

     
    public ObradaPacijenti(int JMBR, boolean noviPac) throws Exception {
         
        ......
        Meni meni=new Meni(this, false, true, true, true, true);
        setJMenuBar(meni);
        .......

    }

 
    public void actionPerformed(ActionEvent e) {
       int jmbr=0;
       if(((JMenuItem)e.getSource()).getText().equals("Istorija")){
                  try{
                  jmbr=(Integer)jtabla.getValueAt(jtabla.getSelectedRow(), 0);
                  }catch(Exception bb){JOptionPane.showMessageDialog(null, "Morate da izaberete pacijenta");}
                    try{
                        new IstorijaPacijenta(jmbr, false).setVisible(true);
                        dispose();
                        }catch(Exception b){System.out.println(b);}
       }
       else dispose();
    }
 


 


[Ovu poruku je menjao misk0 dana 05.04.2010. u 20:17 GMT+1]