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.