Ok se devi trasformare una classe che usa JFrame, in JDialog non dovresti avere grossi problemi, infatti i metodi sono molto simili, cambiano però i parametri del costruttore.
Guarda l'esempio di codice:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
/**
*
* @author Luigi
*/
public class Main extends JFrame implements ActionListener{
Container contenitore;
JButton Bottone;
Finestra finestra = null;
public Main()
{
super("prova");
this.setSize(400, 400);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
contenitore = this.getContentPane();
contenitore.setLayout(new FlowLayout());
Bottone = new JButton("Mostra");
Bottone.addActionListener(this);
contenitore.add(Bottone);
finestra = new Finestra("Finestra 2", this.getOwner());
finestra.setLocation(50, 50);//posiziona la finestra nello schermo
finestra.setSize(200, 200);
this.setVisible(true);
}
public static void main(String[] args) {
new Main();
}
public void actionPerformed(ActionEvent e) {
if(e.getSource() == Bottone)
{
System.out.println("prima di setVisible");
finestra.setVisible(true);
System.out.println("dopo di setVisible");
}
}
private class Finestra extends JDialog
{
public Finestra(String Titolo, Window padre)
{
super(padre, Titolo, ModalityType.APPLICATION_MODAL);
this.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); //non chiude l'aplicazione ma nasconde la finestra quando premi "X"
//qui ci metti tutto il codice che ti serve per creare la finestra
}
}
}
questo codice genere una finestra con un bottone che ti permette di controllare il JDialog (classe Finestra). Quando il JDialog diventa visibile questo blocca la finestra padre (in questo caso la classe Main), però questo succede perché il ModalityType è ModalityType.APPLICATION_MODAL puoi anche metterlo in modo che non blocchi la finestra padre.
Quando il JDialog diventa visibile blocca anche l'esecuzione del codice, infatti come puoi vedere ho messo dei println() prima e dopo l'istruzione setVisible(true) (metodo actionPerformed) relativa al JDialog.
Come puoi notare non appena il JDialog diventa visibile le istruzioni prima di setVisible(true) vengono eseguite, quelle dopo no, per eseguirle devi chiudere il JDialog, cioè mettere setVisible(false).
Spero di essere stato chiaro.