Estoy llamando a UIManager.getSystemLookAndFeelClassName(). Y obtenga como resultado WindowsLookAndFeel, incluso cuando configure el tema actual en WindowsClassicLookAndFeel. Pero espero WindowsClassicLookAndFeel. La pregunta es cómo puedo detectar que el tema clásico de Windows ahora está activono se puede detectar el tema clásico de Windows activo
Respuesta
No estoy muy seguro de lo que está preguntando.
Si se está preguntando qué tema/verse y sentirse OSCILACIÓN está utilizando actualmente, intente UIManager.getSystemLookAndFeelClassName().
Si está tratando de averiguar qué tema está usando Windows, no sé. Probablemente no sea tan fácil de descubrir.
Editar: Un truco rápido podría ser (aparte de utilizar JNA/JNA para consultar alguna API de Windows directamente, que el tema se está utilizando) sería la creación de un nuevo JFrame, colocarlo en algún área, la captura de una pequeña parte de ese borde y compáralo con muestras de bordes (que necesitas crear de antemano y enviar con tu código, para poder comparar programáticamente el capturado-captura-pantalla-bit y todas las imágenes de bordes que envías)
sí, algo así, pero hay com.sun.java.swing.plaf.windows.WindowsLookAndFeel y com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel, pero UIManager.getSystemLookAndFeelClassName() solo devuelve com.sun. java.swing.plaf.windows.WindowsLookAndFeel incluso cuando se aplica el tema clásico de Windows. – fland
Proporciona un enlace a un javadoc sin siquiera leer lo que está haciendo el método. –
@tulskiy fland recientemente reformuló su pregunta, por lo que solo pude adivinar lo que estaba pidiendo. Por lo tanto, mi respuesta ya no tiene mucho sentido. – Tedil
UIManager.getLookAndFeel()
devuelve LaF instalado actualmente. getSystemLookAndFeel()
devuelve un aspecto que se vería como el tema de un sistema actual, p. WindowsLookAndFeel en Windows GTKLookAndFeel en Linux MOtifLookAndFeel en Solaris etc.
No responde, cómo OP puede detectar si el tema clásico está instalado. –
Parece que se inscribió específicamente para hacer esta pregunta y ahora me suscribo específicamente para responderla. Buscaba en Google algo completamente diferente, pero estaba intrigado e hice algunos experimentos, y esto es lo que encontré:
Tienes razón sobre el WindowsClassicLookAndFeel
. Esta clase se extiende a WindowsLookAndFeel
pero no anula nada, y no parece usarse en absoluto, incluso cuando Windows Classic está activo. Entonces, miré el código de WindowsLookAndFeel
y encontré un código interno interesante que hace referencia a la clase privada de paquete XPStyle
. Esta clase parece ser un producto único y el método de obtención, getXP()
, sólo devuelve su ejemplo, si el tema de la 'XP' está activo:
/**
* Get the singleton instance of this class
*
* @return the singleton instance of this class or null if XP styles
* are not active or if this is not Windows XP
*/
static synchronized XPStyle getXP() {
if (themeActive == null) {
Toolkit toolkit = Toolkit.getDefaultToolkit();
themeActive =
(Boolean)toolkit.getDesktopProperty("win.xpstyle.themeActive");
if (themeActive == null) {
themeActive = Boolean.FALSE;
}
if (themeActive.booleanValue()) {
GetPropertyAction propertyAction =
new GetPropertyAction("swing.noxp");
if (AccessController.doPrivileged(propertyAction) == null &&
ThemeReader.isThemed() &&
!(UIManager.getLookAndFeel()
instanceof WindowsClassicLookAndFeel)) {
xp = new XPStyle();
}
}
}
return xp;
}
Curiosamente, el código comprueba para el WindowsClassicLookAndFeel
de nuevo, pero sabemos que esto no es una ya utilizado (tal vez ha cambiado) ... Pero la mejor parte es la verificación de la propiedad de escritorio win.xpstyle.themeActive
la extracción de esta a partir del código, hice la siguiente prueba:
package test;
import java.awt.Toolkit;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.UIManager;
public class WindowsClassicThemeDetector {
public static boolean isWindowsLAF() {
return UIManager.getLookAndFeel().getID().equals("Windows");
}
public static boolean isWindowsClassicLAF() {
return isWindowsLAF()
&& !(Boolean) Toolkit.getDefaultToolkit().getDesktopProperty(
"win.xpstyle.themeActive");
}
public static void main(String... args) throws Exception {
// Apply the system look and feel (which will be Windows)
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
// Check the initial theme state on startup
System.out.println(UIManager.getLookAndFeel().getClass());
System.out.println("Windows classic is initially: " + isWindowsClassicLAF());
// Register a listener in case the theme changes during runtime.
Toolkit.getDefaultToolkit().addPropertyChangeListener("win.xpstyle.themeActive",
new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
System.out.println("Windows classic is now: " + isWindowsClassicLAF());
}
});
// Wait until user presses ENTER in the console and then exit.
System.in.read();
}
}
puede importar esta clase en su programa y llama al método isWindowsClassicLAF()
después de configurar tu Look & Feel en cualquier punto. También he dado un ejemplo de cómo puedes escuchar los cambios al tema en tiempo de ejecución.
Esto se ha probado en XP. Si el usuario cambia de un tema de XP a otro, el oyente no se dispara, pero si el usuario cambia de un tema a Clásico, o viceversa, lo hará.
Espero que ayude!
¡Ojalá pudiera marcar esto como la respuesta correcta! Camino a seguir. –
- 1. javascript: detectar si XP o el tema clásico de Windows está habilitado
- 2. Cambiar el color de fondo del cuadro de lista deshabilitado en el tema clásico de Windows
- 3. tema Python: No se puede encontrar vcvarsall.bat
- 4. TDateTimePicker Estilos de VCL en XE2 que solo ocurre en el tema clásico de Windows
- 5. Cambiar un tema de Highcharts (parcialmente activo)
- 6. Detectar si el salvapantallas está activo y/o el usuario ha bloqueado la pantalla en Windows
- 7. ¿Cómo detectar cuándo se cambia el tema en WP7?
- 8. JSF: No se puede detectar ViewExpiredException
- 9. No se puede detectar el error denegado de SharePoint Access
- 10. cambie el tema activo de Drupal 7 programáticamente
- 11. FastMM no puede detectar fugas de memoria
- 12. No se puede diseñar el estado activo del botón para cerrar el diálogo de jqueryUI
- 13. No se puede eliminar el servicio de Windows 7
- 14. ¿Cómo puedo detectar si Dispatcher.DisableProcessing está activo?
- 15. No se puede detectar por qué el siguiente fragmento de código no se ha vectorizado
- 16. No se puede crear socket en Windows
- 17. mongodb no se puede iniciar en Windows?
- 18. No se puede mostrar el cuadro de búsqueda en el tema personalizado
- 19. No se puede instalar thin en windows
- 20. no se puede instalar XDEBUG en Windows?
- 21. no puede detectar errores de SQL cuando se utiliza ExecuteNonQuery()
- 22. No se puede detectar la excepción de Activator.CreateInstance
- 23. No se puede editar el archivo eclipse.ini en Windows 7
- 24. Git, No se puede clonar el repositorio en Windows
- 25. No se puede usar el comando jar en Windows
- 26. "No se puede abrir el archivo de carga, tema de color" error en emacs-24.1
- 27. 500 Server en ASP clásico - No se puede obtener más detalles
- 28. tema django-admin.py y virtualenv en Windows
- 29. ¿Cómo se puede saber si una URL de activo realmente apunta a un activo existente?
- 30. Windows no puede iniciar el servicio
No sé la respuesta, pero las personas que brindan las respuestas ni siquiera parecen leer la pregunta. Windows XP, Vista y 7 tienen su tema estándar, pero también se pueden hacer para parecerse a Windows 2000 (el tema clásico). La pregunta es cómo detectar a cuál de los usuarios ha configurado Windows. –
@Ricky Clarkson: de la pregunta entiendo que él dice que establece el "tema" para 'WindowsClassicLookAndFeel' que es un LaF en Java y quiere ver si está instalado actualmente. –