ventana una sintaxis mostrar modal example ejemplos ejemplo desde como boton abrir java swing jdialog

java - una - jframe, jinternalframe y jdialog



Mostrar JDialog en la barra de tareas de Windows (4)

Encontré la respuesta a su pregunta porque tenía el problema opuesto. Tenía un JDialog que se mostraba en la barra de tareas y me llevó mucho tiempo descubrir cómo evitar que se muestre. Resulta que si pasa un padre null al constructor de JDialog, su diálogo se mostrará en la barra de tareas .

JDialog dialog = new JDialog((Dialog)null);

El lanzamiento a java.awt.Dialog es para evitar el constructor ambiguo.

Estoy tratando de mostrar un JDialog en Windows. ¿Cómo muestro un JDialog (como JFrame ) en mi barra de tareas de Windows?


Los cuadros de diálogo se muestran en la barra de tareas, cuando no tienen propietario. La posibilidad de tener Diálogos sin propietario se agregó a AWT en Java 6. Desafortunadamente, en este momento, la clase Swing JDialog ya tenía constructores con un comportamiento predefinido con respecto a null propietarios ausentes o null , trabajando en torno a las limitaciones de las versiones anteriores de Java. Este comportamiento no se puede cambiar debido a problemas de compatibilidad.

Por lo tanto, cuando utiliza los antiguos constructores JDialog() y aquellos que aceptan un argumento de Frame , exhiben el comportamiento compatible con las versiones anteriores, creando un Frame falso ficticio como propietario si no se especifica ninguno. Entonces, los cuadros de diálogo creados de esta manera siempre son propiedad de un cuadro.

Esto también se incorpora a la documentation :

NOTA: Este constructor no le permite crear un JDialog sin JDialog . Para crear un JDialog sin JDialog , debe usar el JDialog(Window) o JDialog(Dialog) con un argumento de null .

Los constructores nombrados son nuevos en Java 6, ya que también se agregó la posibilidad de tener un Window diálogo propiedad de otro Window Dialog o una Window en esa versión. Dado que estos nuevos constructores no tienen que ser compatibles con una versión anterior, pueden admitir cuadros de diálogo sin propietario. Esta es la razón por la cual la solución en esta respuesta funciona.

También puede usar el constructor tomando ModalityType como en esta respuesta ya que este constructor también es nuevo dos Java 6 y admite diálogos sin propietario. Pero no es necesario crear una subclase de JDialog para usar este constructor.


Un cuadro de diálogo no puede tener una entrada en la barra de tareas, pero puede construir un cuadro que no tenga ningún efecto visible y usarlo como elemento principal para el cuadro de diálogo. Entonces se verá como si el diálogo tuviera una entrada en la barra de tareas. El siguiente código muestra cómo hacerlo:

class MyDialog extends JDialog { private static final List<Image> ICONS = Arrays.asList( new ImageIcon("icon_16.png").getImage(), new ImageIcon("icon_32.png").getImage(), new ImageIcon("icon_64.png").getImage()); MyDialog() { super(new DummyFrame("Name on task bar", ICONS)); } public void setVisible(boolean visible) { super.setVisible(visible); if (!visible) { ((DummyFrame)getParent()).dispose(); } } } class DummyFrame extends JFrame { DummyFrame(String title, List<? extends Image> iconImages) { super(title); setUndecorated(true); setVisible(true); setLocationRelativeTo(null); setIconImages(iconImages); } }


class MyDialog extends JDialog { MyDialog() { super(null, java.awt.Dialog.ModalityType.TOOLKIT_MODAL); setDefaultCloseOperation(DISPOSE_ON_CLOSE); } }