2011-12-13 8 views
6

Se una finestra JFrame è ridotta a icona, c'è un modo per riportarla a fuoco?Java - Mostra una finestra JFrame minimizzata

Sto cercando di farlo fare clic su un determinato punto, quindi ripristinarlo.

  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

Il genitore o figlio della tua finestra jframe? – Pritom

+0

Potrebbe essere o. Se ha bisogno di essere l'uno o l'altro, posso cambiarlo. – Stripies

+0

Non riesco a capire cosa stai cercando di fare. – Pritom

risposta

12

Se si vuole riportarlo ad essere iconified, si può solo impostare il suo stato di 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); 

Esempio da here.

Ci sono anche WindowEvents che vengono attivati ​​ogni volta che lo stato è cambiato e un'interfaccia WindowListener che gestisce questi triggers.In questo caso, è possibile utilizzare:

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

Se si vogliono controllare il cambiamento di stato di un altro programma , non esiste una soluzione "pura Java", ma richiede solo il ID della finestra.

+1

L'ho provato solo per i test e ha funzionato. Ma quando l'ho implementato nel mio programma attuale, non funziona. – Stripies

+0

Se pubblichi il tuo codice nella domanda, possiamo modificarlo per farlo funzionare. – Jon

+0

Ho modificato il post principale. – Stripies

5

È possibile impostare lo stato normale:

frame.setState(NORMAL); 

esempio completa:

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: buoni suggerimenti, li ho aggiunti e un pulsante per ridurre al minimo. – Jonas

+0

Rumore eliminato. Mi piacerebbe votare, ma l'ho fatto prima. :) –

Problemi correlati