Tengo una aplicación Java Swing ya escrita (por lo que no hay marcos de interfaz de usuario de conmutación) que me gustaría ver al menos decente usando GTKLookAndFeel. Ya he explicado las diferencias de tamaño de fuente y componente en LookAndFeels, pero una cosa que no puedo entender es por qué mis menús emergentes no tienen fronteras. Parece que están usando bordes de Synth que no se ven como GTK nativos. Me gustaría poder admitir Metal, Windows y GTK, pero estas ventanas emergentes se ven terribles. ¿Es esto un error? ¿Cuál es una buena manera (no hacky) de arreglar esto sin afectar los bordes de otros LookAndFeels que se ven bien?¿Por qué las ventanas emergentes GtkLookAndFeel de Java no tienen borde?
Respuesta
En mi opinión, GTK LaF está roto por diseño. Sí no respetan la configuración de la IU de los programadores (color de la fuente, bordes de fondo, etc.) para JCOmponents aparentemente aleatorios. Esto se debe a que obtiene su configuración de un archivo .gtkrc, no de llamadas a setXXX (...). Me quedaría con Metal para Linux y 'nativo' para Windows.
Respuesta:
El GTK + aspecto y la sensación puede ser personalizado a través de archivos de recursos. GTK + mirada de oscilación y la sensación utiliza el siguiente algoritmo para localizar los archivos de recursos :
- Si existe el swing.gtkthemefile propiedad del sistema, analizarlo y detener, por ejemplo: java -Dswing.gtkthemefile =/tmp/customTheme -jar SwingSet2.jar.
- Si existe el archivo user.home/.gtkrc-2.0, analízalo y continúa.
- Determine el nombre del tema seleccionado por el usuario (THEMENAME) a través de la propiedad de escritorio gnome.net/ThemeName que se determina mediante XSETTINGS. Si esta propiedad es nula, use el valor predeterminado como THEMENAME. 1. Si el archivo user.home/.themes/THEMENAME/gtk-2.0/gtkrc existe, lo analizan y lo detienen. 2. Si existe la propiedad del sistema swing.gtkthemedir y existe el archivo swing.gtkthemedir/THEMENAME/gtk-2.0/gtkrc , analízalo y finalízate. 3. Si la propiedad del sistema swing.gtkthemedir no existe y existe el archivo /usr/share/themes/THEMENAME/gtk-2.0/gtkrc , analízalo y finalízalo. 4. Por último, si swing.gtkthemedir se define parse swing.gtkthemedir/THEMENAME/gtk/gtkrc, de lo contrario, analice /usr/share/themes/THEMENAME/gtk/gtkrc.
Una forma de GTK + se puede personalizar es por manera de un motor de temas. Un puñado de motores existen. En 1.4.2, Swing admite archivos de tema para Default, pixmap y bluecurve engines. Estamos investigando formas de abrir la API para permitir la creación de motores GTK adicionales. Visite http://www.themes.org para ver ejemplos.
- http://java.sun.com/j2se/1.4.2/docs/guide/swing/1.4/Post1.4.html
Mi conjetura es que Java está tomando el tema desde otro archivo rc o no se soportan las opciones de borde actuales.
sé la respuesta es tardía, pero si alguien ve a esta pregunta en Google (como yo), entonces me parece que esta solución es mejor que nada:
if (UIManager.getLookAndFeel().getClass().getName().equals("com.sun.java.swing.plaf.gtk.GTKLookAndFeel"))
aPopupMenu.setBorder(BorderFactory.createMatteBorder(1, 1, 1, 1, Color.gray));
No parece trabajar para menús agregados a los menús emergentes (incluso si llama a la función sobre ellos), pero muestra el borde en el menú principal.
Aquí hay un artículo en el blog que describe dos enfoques diferentes para solucionar el problema:
http://www.ailis.de/~k/archives/67-Workaround-for-borderless-Java-Swing-menus-on-Linux.html
El primer enfoque se describe cómo solucionar el tema GTK utilizado. Esto corrige todos los problemas de separador de menú y borde de menú de todas las aplicaciones de Swing.
El segundo enfoque es la aplicación de una solución en el código Java de una aplicación Swing. Puede usar esto en sus propias aplicaciones para que sus usuarios no tengan que corregir el tema GTK manualmente.
Hay archivos rc incompatibles.
Desafortunadamente, el blog http://www.ailis.de/~k/ está cerrado.
Ubuntu/Gnome Shell: p. Ej. /usr/share/themes/Adwaita/gtk-2.0/gtkrc
style "menu" {
xthickness = 1
ythickness = 1 ...
}
... style "separator_menu_item" {
xthickness = 1
ythickness = 1
... }
Actualización 11/30/2015: Para Ubuntu/Unidad refieren http://blog.hani-ibrahim.de/en/ubuntus-swing-gtk-laf.html => menú global, las fuentes nativas.
En Linux Mint están los menus.rc
archivos en la casa de moneda-temas en /usr/share/themes/[mint-theme]/gtk-2.0/style
En la sección “Menú” estilo cambio:
xthickness = 0
ythickness = 0
text[ACTIVE] = @base_color
a:
xthickness = 1
ythickness = 1
text[ACTIVE] = @fg_color
En la sección style "men u-elemento separador” cambiar la entrada:
ythickness = 0
a:
ythickness = 1
me escribió una bash-script de menta, que hace el trabajo de forma automática. Soluciona los 3 problemas:
- Falta el borde del menú.
- Color de fuente incorrecto de casilla de verificación activada y elementos de menú de botón de opción (la fuente tiene el mismo color que el fondo y parece invisible).
- Sin separadores de menú.
- 1. MVC-ventanas emergentes
- 2. Selenium: Ventanas emergentes de prueba
- 3. Evitar legalmente el bloqueo de ventanas emergentes
- 4. Ventanas emergentes y cuadros de diálogo jQuery
- 5. Control de ventanas emergentes en las aplicaciones Metro de Windows8?
- 6. ¿Qué desencadena los bloqueadores de ventanas emergentes en los navegadores?
- 7. ¿Por qué las clases abstractas en Java tienen constructores?
- 8. Apilar varias ventanas emergentes de libnotify
- 9. Necesito elevar permisos sin ventanas emergentes UAC
- 10. ¿Por qué las listas de Scala no tienen un pedido?
- 11. Evite ventanas emergentes de Windows Firewall con sockets en localhost
- 12. Drupal: crear contenido en ventanas emergentes/lightbox?
- 13. Cómo crear ventanas emergentes en Rails 3.1
- 14. ¿Por qué las tuplas tienen uses_allocator pero los pares no?
- 15. ¿Por qué las continuaciones no tienen una utilidad útil?
- 16. jQuery cola en Chrome userscript con ventanas emergentes?
- 17. Cómo un bookmarklet puede evitar el bloqueo de ventanas emergentes
- 18. NSPathControl con ventanas emergentes para cada componente de la ruta?
- 19. iOS: Creación de sugerencias/ventanas emergentes de ayuda
- 20. Manejo de ventanas emergentes del navegador con Selenium
- 21. ¿Qué complejidad tienen las operaciones en BigInteger de Java 7?
- 22. Aero Glass Bordes de Ventanas Emergentes en C#
- 23. ¿Por qué EnumWindows devuelve más ventanas de las que esperaba?
- 24. No entiendo por qué la tabla tiene doble borde.
- 25. ¿Qué licencia tienen las RFC?
- 26. Crear ventanas emergentes informativas/información sobre herramientas en Cocoa
- 27. Cómo deshabilitar las ventanas emergentes de seguridad de MS Outlook en C#?
- 28. ¿Por qué los registros de Delphi no tienen herencia?
- 29. ¿Por qué las fuentes Java tienen tantas carpetas dentro de la otra?
- 30. Evitar el desplazamiento en segundo plano al mostrar ventanas emergentes
Pero si está siguiendo un .gtkrc, las ventanas emergentes deberían tener un borde y una sombra, ya que todas las demás aplicaciones nativas lo hacen. –