ventanas sintaxis propiedades manejo ejemplo caracteristicas java swing jframe jdialog

java - sintaxis - JFrame.getLocationOnScreen() para ventana minimizada



propiedades de jdialog en java (1)

Simplemente use getLocation() . Minimizado o no, siempre devolverá el valor apropiado:

import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import javax.swing.JFrame; import javax.swing.SwingUtilities; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; public class TestJFrame { public void initUI() { final JFrame frame = new JFrame(TestJFrame.class.getSimpleName()); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(600, 400); frame.setVisible(true); Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable() { @Override public void run() { System.err.println(frame.getLocation()); } }, 0, 1000, TimeUnit.MILLISECONDS); } public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); SwingUtilities.invokeLater(new Runnable() { @Override public void run() { new TestJFrame().initUI(); } }); } }

Llamo a getLocationOnScreen() desde JFrame en mi aplicación Swing. Si JFrame se minimiza -32000, se devuelve -32000.

Se espera:

Coordenadas de ubicación en la computadora que muestra X = -32000, Y = -32000

Pero necesito saber la ubicación de la ventana antes de que se minimizara o sería la ubicación si se maximiza nuevamente sin maximizarla realmente. Porque necesito JDialog relación con el JFrame aunque esté minimizado.

Posible solución: agregue WindowListener a JFrame y en el evento windowIconified() guarde las coordenadas. Y luego usarlo en lugar de getLocationOnScreen() .

¿Hay una mejor solución usando solo métodos JFrame ?

Se espera la configuración de pantallas múltiples y se usa el siguiente código.

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); GraphicsDevice[] gs = ge.getScreenDevices(); for (int j = 0; j < gs.length; j++) { GraphicsDevice gd = gs[j]; GraphicsConfiguration[] gc = gd.getConfigurations(); for (int i = 0; i < gc.length; i++) { Rectangle gcBounds = gc[i].getBounds(); Point loc = topContainer.getLocationOnScreen(); //might return -32000 when minimized if (gcBounds.contains(loc)) { //fails if -32000 is returned