¿Cómo puedo hacer una ventana (tales como, javax.swing.JFrame
, java.awt.Dialog
, javax.swing.JDialog
, etc. java.awt.Frame
) reservar el borde de la pantalla, como un muelle, barra de tareas, Trillian, o OneNote Microsoft ¿poder? Mi objetivo es usar solo bibliotecas estándar JDK si es posible.Reservar el borde de la pantalla en Java
Respuesta
Este comportamiento es muy específico para el sistema operativo Windows, y como tal, no hay manera de hacer esto en la norma JDK o AWT/Swing, ya que estos deben funcionar de manera consistente en varios sistemas operativos diferentes.
El equivalente más cercano a lo que desea es obtener los límites de la pantalla actual y mover/cambiar el tamaño de la ventana para que coincida con un lado, aunque ahora tendrá algún efecto en el escritorio u otras ventanas.
Lo más parecido que probablemente obtendrá a lo que quiere es usar JNIWrapper and WinPack para alterar el comportamiento de la ventana nativa. Sin embargo, su documentación no muestra nada sobre las barras de herramientas de escritorio. Probablemente tendrá que usar su JNI para acceder directamente a las funciones COM específicas y luego descubrir cómo hacerlo en C++, pero si no conoce C++, probablemente esté fuera del alcance de su proyecto.
Adición:
Si desea hacer uso de las características nativas para los sistemas operativos y entornos de escritorio específico, tendrá que conectar con una biblioteca nativa C++ para enganchar en Gnome, KDE, Mac OS, etc. Busque "Java JNI" y el sistema de ventanas con el que desea integrar para encontrar paquetes que pueda usar. Por ejemplo, para Gnome, vea here.
Si desea admitir múltiples sistemas operativos, asegúrese de crear una interfaz común para que pueda realizar implementaciones que se conecten con los JNI respectivos según cuál esté disponible en tiempo de ejecución, y permitir la recuperación si ninguno de ellos está disponible.
PS. Si desea notificaciones emergentes en su aplicación, Mac OS y varias compilaciones de Linux admiten Growl para que pueda ahorrar algo de tiempo.
Tenía miedo de eso u.u ¿Por qué otros SO no pueden tener todas las capacidades de Windows? : c – Supuhstar
Bueno, para empezar, si todos los SO tuvieran todas las mismas características, no habría elección para los consumidores.Además, debemos recordar que Java no está diseñado solo para PC, sino que también se ejecuta en teléfonos móviles, sistemas de seguridad y otros dispositivos integrados que pueden tener capacidades de visualización muy limitadas, o ninguna en absoluto. Sun/Oracle no puede escribir código nativo para admitir todas las configuraciones posibles de hardware y software. Ahí es donde tienes que encontrar un JNI que haga lo que quieras, o escribir uno tú mismo. Supongo que tendrás que buscar la solución simple: mover y cambiar el tamaño de la ventana de tu aplicación. – BoffinbraiN
Espera ... Pero OS X puede reservar la parte superior para la barra de menú y otros lados para el dock, Gnome y Unity pueden hacer lo mismo ... ¿por qué es este SO específico? – Supuhstar
Puede utilizar Toolkit.getDefaultToolkit(). GetScreenInsets() De fuentes JMenu
Toolkit toolkit = Toolkit.getDefaultToolkit();
GraphicsConfiguration gc = getGraphicsConfiguration();
Rectangle screenBounds = new Rectangle(toolkit.getScreenSize());
GraphicsEnvironment ge =
GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice[] gd = ge.getScreenDevices();
for(int i = 0; i < gd.length; i++) {
if(gd[i].getType() == GraphicsDevice.TYPE_RASTER_SCREEN) {
GraphicsConfiguration dgc =
gd[i].getDefaultConfiguration();
if(dgc.getBounds().contains(position)) {
gc = dgc;
break;
}
}
}
if (gc != null) {
screenBounds = gc.getBounds();
// take screen insets (e.g. taskbar) into account
Insets screenInsets = toolkit.getScreenInsets(gc);
screenBounds.width -=
Math.abs(screenInsets.left + screenInsets.right);
screenBounds.height -=
Math.abs(screenInsets.top + screenInsets.bottom);
position.x -= Math.abs(screenInsets.left);
position.y -= Math.abs(screenInsets.top);
}
- 1. Dibuje en el borde de la pantalla en Commodore 64
- 2. Reservar parte del escritorio
- 3. ¿Cómo se hace el acoplamiento de AppBar (al borde de la pantalla, como WinAmp) en WPF?
- 4. Java encuentra la imagen en la pantalla
- 5. ¿Cómo se obtiene el ancho de la pantalla en java?
- 6. Problema al generar el borde de un rectángulo en Java?
- 7. Mover el mouse de Java en cualquier lugar de la pantalla
- 8. Área de la pantalla de reserva en Windows 7
- 9. Android Java: Apagar la pantalla
- 10. ¿Cómo obtener la pantalla DPI en Java?
- 11. comandos en java para borrar la pantalla
- 12. Cómo colocar etiquetas de borde en el borde en graphviz
- 13. Borde redondeado en un solo lado java
- 14. Cómo eliminar el borde de ButtonChrome (al definir la plantilla de un borde)?
- 15. ¿Cómo deshacerse del borde de desvanecimiento superior en el modo de pantalla completa de Android?
- 16. Tipo de borde en el borde de una vista (iOS)
- 17. ¿Cómo detectar "correctamente" el DPI de la pantalla con Java?
- 18. Cómo rodear componentes Java Swing con borde?
- 19. Java - ¿Cómo evito que BorderLayout EAST abrace el lado de la pantalla?
- 20. cómo poner texto en el borde
- 21. Captura de impresiones de pantalla en Java
- 22. cómo reservar una instancia de amazon ec2 en ejecución?
- 23. autogenerar la pantalla HTTP raspando código Java
- 24. ¿Quitar el borde de la ventana?
- 25. pantalla de código java resolución
- 26. opción de pantalla claro en java
- 27. ¿Cómo detectar la pantalla actual con Java?
- 28. Cómo recortar automáticamente un borde blanco de imagen en Java?
- 29. No se pudo reservar suficiente espacio para que el montón de objetos inicie JVM
- 30. Java: No se puede reservar espacio suficiente para montón de objetos
¿Lo haría 'JSplitPane'? http://download.oracle.com/javase/tutorial/uiswing/components/splitpane.html – trashgod
¿Quiere decir que desea crear ventanas que comporten la barra de herramientas en el escritorio de Windows? – AlexR
@trashgod: 'javax.swing.JSplitPane' no funcionará; es un componente que solo funciona dentro de una ventana – Supuhstar