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