Tengo un JPanel
, que quiero responder con un clic del mouse y luego abrir un JDialog
. El constructor JDialog
necesita una instancia de JFrame
y no JPanel
- ¿cómo puedo solucionar esto?Crear una instancia de JDialog de JPanel
Respuesta
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());
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.
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
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.
- 1. Cómo crear un JDialog modal encima de otro modal JDialog
- 2. Crear una instancia de IDataAdapter de la instancia de IDbConnection
- 3. ¿Cómo crear una instancia predeterminada después de crear una instancia con nombre?
- 4. Error al crear una instancia de com.android.menubar.internal.MenuBarEnhancerCocoa
- 5. ¿Cómo establecer/crear una instancia de Generics?
- 6. Crear una instancia de PagerAdapter Android
- 7. Cómo crear una instancia de org.springframework.dao.DataAccessException?
- 8. ¿Debo crear una nueva instancia de delegado?
- 9. Crear solo una instancia de servicio (Android)
- 10. Crear una ventana de propiedades de inspección, botón accionado como un JDialog
- 11. Java cómo crear una instancia de una clase de cadena
- 12. JOptionPane vs JDialog
- 13. Crear instancia de palabra exclusiva
- 14. Crear instancia de tipo genérico?
- 15. crear instancia de clase dinámica
- 16. JPanel Sustitución con JPanel en un JFrame
- 17. Crear instancia predeterminada de tipo
- 18. Crear una instancia de una clase python en C#
- 19. cómo crear dinámicamente una instancia de una clase en python?
- 20. Cómo crear una instancia de UITableViewCell desde una punta
- 21. Backbone relacional - no puede crear una instancia más de una ,,,
- 22. crear una nueva instancia de una clase sin operador "nuevo"
- 23. ¿Podemos crear una instancia de una interfaz en Java?
- 24. Crear una instancia, ya tengo el tipo
- 25. weka.core.UnassignedDatasetException al crear una instancia sin etiqueta
- 26. No se puede crear una instancia javax.servlet.ServletException
- 27. ¿Cómo crear una instancia de java.util.Calendar en tiempo de época?
- 28. Cómo crear una instancia de PrivateType de clase privada interna
- 29. ¿Puedes crear una instancia de objeto de JSON en .NET?
- 30. Java - Obtener una imagen de un JPanel
¿Ha considerado utilizar un JOptionPane? – ChadNC