2011-12-13 48 views
6

Si se minimiza una ventana JFrame, ¿hay alguna forma de volverla a enfocar?Java: muestra una ventana JFrame minimizada

Estoy tratando de hacer que haga clic en un cierto punto, luego restaurarlo.

  while (isRunning) { 
       start = System.currentTimeMillis(); 
       frame.setState(Frame.ICONIFIED); 
       robot.mouseMove(clickX, clickY); 
       robot.mousePress(InputEvent.BUTTON1_MASK); 
       frame.setState(Frame.NORMAL); 
       Thread.sleep(clickMs - (System.currentTimeMillis() - start)); 
      } 
+0

¿Su ventana de jframe es padre o hijo? – Pritom

+0

Podría ser cualquiera. Si necesita ser uno o el otro, puedo cambiarlo. – Stripies

+0

No puedo entender lo que estás tratando de hacer. – Pritom

Respuesta

12

Si usted quiere traer de vuelta de ser iconified, sólo puede establecer su estado de normal:

JFrame frame = new JFrame(...); 
// Show the frame 
frame.setVisible(true); 

// Sleep for 5 seconds, then minimize 
Thread.sleep(5000); 
frame.setState(java.awt.Frame.ICONIFIED); 

// Sleep for 5 seconds, then restore 
Thread.sleep(5000); 
frame.setState(java.awt.Frame.NORMAL); 

Ejemplo de here.

Hay también WindowEvents que se activa cada vez que se cambia el estado y una interfaz WindowListener que se encarga de estas triggers.In este caso, es posible utilizar:

public class YourClass implements WindowListener { 
    ... 
    public void windowDeiconified(WindowEvent e) { 
    // Do something when the window is restored 
    } 
} 

Si estás interesado en comprobar el cambio de estado de otro programa , no existe una solución de "Java puro", solo requiere obtener el ID de la ventana.

+1

Lo intenté solo para probarlo, y funcionó. Pero cuando lo implementé en mi programa real, no funciona. – Stripies

+0

Si publica su código en la pregunta, podemos modificarlo para que funcione. – Jon

+0

Edité la publicación principal. – Stripies

5

Puede establecer el estado a la normalidad:

frame.setState(NORMAL); 

ejemplo completo:

public class FrameTest extends JFrame { 

    public FrameTest() { 
     final JFrame miniFrame = new JFrame(); 
     final JButton miniButton = new JButton(
      new AbstractAction("Minimize me") { 
      public void actionPerformed(ActionEvent e) { 
       miniFrame.setState(ICONIFIED); 
      } 
     }); 

     miniFrame.add(miniButton); 
     miniFrame.pack(); 
     miniFrame.setVisible(true); 

     add(new JButton(new AbstractAction("Open") { 
      public void actionPerformed(ActionEvent e) { 
       miniFrame.setState(NORMAL); 
       miniFrame.toFront(); 
       miniButton.requestFocusInWindow(); 
      } 
     })); 

     pack(); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setVisible(true); 
    } 

    public static void main(String[] args) { 
     new FrameTest(); 
    } 

} 
+0

@AndrewThompson: buenas sugerencias, las agregué y un botón para minimizar. – Jonas

+0

Ruido eliminado. Volvería a votar, pero lo hice antes. :) –

Cuestiones relacionadas