2012-05-09 24 views

Respuesta

1

Hay un constructor que no necesitan argumento:

JDialog dialog = new JDialog(); 

Si lo que desea es hacer que el diálogo modal, tal vez se puede obtener una referencia estática de que JFrame principal, algo así como:

JDialog dialog = new JDialog(MyMainJFrame.getInstance()); 
3

El uso del constructor libre de parámetros hará que el diálogo carezca de propietario. Creo que lo mejor sería hacer que el Frame que posee su Panel sea el propietario del diálogo.

Con eso, quiero decir que debe usar el getParent() de su JPanel para encontrar su propietario y luego enviar este objeto encontrado como el propietario de su JFrame.

Un código de crudo que sería

java.awt.Container c = myPanel.getParent(); 
while (!(c instanceof javax.swing.JFrame) && (c!=null)) { 
     c = c.getParent(); 
} 
if (c!=null) { 
    JFrame owner=(javax.swing.JFrame) c; 
    JDialog myDialog=new JDialog(owner); 
} 

No he probado este código, pero es lo suficientemente buena para que usted entienda la idea.

2

Si decidió ir con JOptionPane, podría agregar un MouseListener al JPanel con una clase interna mouseAdapter para manejar eventos mouseClicked. Debería declarar el panel final para acceder al panel desde la clase interna.

final JPanel testPanel = new JPanel(); 

testPanel.addMouseListener(new MouseAdapter(){ 
    public void mouseClicked(MouseEvent e) 
    {   
     JOptionPane.showMessageDialog(testPanel,"Title","InformationMessage",JOptionPane.INFORMATION_MESSAGE); 

    }});//end of mouseClicked method 
7

Usted realmente debe tratar de unir el JDialog a un diálogo de los padres o del marco, sobre todo si quieres que modal (pasando una ventana padre, el diálogo se adjuntará a su ventana y trayendo el padre llevará el diálogo infantil también). De lo contrario, la experiencia de usuario realmente puede ir mal: diálogos perdidos, el bloqueo de ventanas sin ver el cuadro de diálogo modal, etc ...

Para localizar a su ventana padre JPanel, todo lo que necesita es este código:

JPanel panel = new JPanel(); 
Window parentWindow = SwingUtilities.windowForComponent(panel); 
// or pass 'this' if you are inside the panel 
Frame parentFrame = null; 
if (parentWindow instanceof Frame) { 
    parentFrame = (Frame)parentWindow; 
} 
JDialog dialog = new JDialog(parentFrame); 
... 

Si no sabe si está en un Marco o Diálogo, realice la prueba "instancia de" para ambas clases.

Cuestiones relacionadas