Non hai provato a passare f al costruttore?

codice:
public class finestra extends JPanel implements ItemListener{

...
JButton cambia;

public finestra(JFrame f){ 
		
		super();
                ...
                cambia=new JButton(" MODIFICA ");
                cambia.addActionListener(new pulsante());
                add(cambia);
              }

	class pulsante implements ActionListener{
		
		public void actionPerformed (ActionEvent e){
			
		Object PulsantePremuto = e.getSource();

                if((PulsantePremuto==cambia){

	JOptionPane myoption = new JOptionPane ("messaggio",
        JOptionPane.QUESTION_MESSAGE, JOptionPane.YES_NO_OPTION); 
	JDialog mydialog = myoption.createDialog(f,"titolo");
	mydialog.pack();
        mydialog.show();


               }

              }
            }

	public static void main(String arg[]){
		
		JFrame f = new JFrame("Orari");
		Container c= f.getContentPane();
		finestra fin = new finestra(f); 
		c.add(fin);
		f.addWindowListener(new Ascoltatore());
		f.setSize(410,330);
		f.setLocation(400,250);
		f.show();

		
		}
           }
Magari in questo modo riesci a risolvere il problema, oppure potresti portare la dichiarazione di f fuori dal main, cioè renderla generale, ad esempio:

codice:
Nella classe:
    JFrame f;

Nel main:
   f = new JFrame("Orari");
Prova a vedere se con uno di questi due metodo riesci a risolvere il tuo problema (nel secondo metodo ho dato per scontato che il main e la parte della JDialog si trovano nella stessa classe, altrimenti non va bene).

Ciao.