Sto chiamando UIManager.getSystemLookAndFeelClassName(). E ottieni come risultato WindowsLookAndFeel, anche quando si imposta il tema corrente su WindowsClassicLookAndFeel. Ma mi aspetto WindowsClassicLookAndFeel. Domanda è come posso rilevare che il tema classico di Windows è ora attivonon è in grado di rilevare che il tema classico di Windows è attivo
risposta
Non sono abbastanza sicuro di quello che stai chiedendo.
Se ti stai chiedendo quale tema/aspetto senti utilizzare attualmente SWING, prova UIManager.getSystemLookAndFeelClassName().
Se si sta tentando di scoprire quale tema utilizza Windows, non lo so. Probabilmente non è abbastanza facile scoprirlo.
Edit: Un hack rapido potrebbe essere (a parte utilizzando JNA/JNA per interrogare alcune API di Windows direttamente quale tema viene utilizzato) sarebbe la creazione di una nuova JFrame, metterlo in una certa zona, catturare una piccola parte della quel confine e confrontalo con campioni di bordi (che devi creare in anticipo e spedire con il tuo codice, in modo da poter confrontare a livello di codice il bit di acquisizione appena acquisito e tutte le immagini di confine che spedisci)
sì, qualcosa del genere, ma com.sun.java.swing.plaf.windows.WindowsLookAndFeel e com.sun.jind.wind.windows.windows.WindowsClassicLookAndFeel, ma UIManager.getSystemLookAndFeelClassName() restituisce solo com.sun. java.swing.plaf.windows.WindowsLookAndFeel anche quando si applica il classico tema di Windows. – fland
Fornisci un collegamento a un javadoc senza nemmeno sapere cosa sta facendo il metodo. –
@tulskiy fland ha riformulato di recente la sua domanda, quindi ho potuto solo intuire cosa stava chiedendo. Quindi la mia risposta non ha più senso. – Tedil
UIManager.getLookAndFeel()
restituisce attualmente installato LaF. getSystemLookAndFeel()
restituisce un aspetto che sembra il tema di un sistema attuale, ad es. WindowsLookAndFeel su Windows GTKLookAndFeel su Linux MOtifLookAndFeel su Solaris, ecc.
Non risponde, come OP può rilevare se è installato il tema classico. –
Sembra che tu ti sia iscritto appositamente per fare questa domanda, e ora mi sto registrando appositamente per rispondere! Ero Googling per qualcosa di completamente diverso ma ero incuriosito e ho fatto qualche esperimento, ed ecco cosa ho trovato:
Hai ragione riguardo al WindowsClassicLookAndFeel
. Questa classe estende WindowsLookAndFeel
ma non sovrascrive nulla e non sembra essere utilizzata affatto, anche quando Windows Classic è attivo. Quindi, ho esaminato il codice di WindowsLookAndFeel
e ho trovato un codice interno interessante che fa riferimento alla classe privata del pacchetto XPStyle
. Questa classe sembra essere un Singleton e il metodo getter, getXP()
, restituisce solo il suo esempio, se il tema 'XP' è attivo:
/**
* 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;
}
È interessante notare che il codice verifica per la WindowsClassicLookAndFeel
nuovo, ma sappiamo che questo non è un più utilizzato (forse è cambiato) ... Ma la parte migliore è il controllo per la proprietà del desktop win.xpstyle.themeActive
estrazione di questa dal codice, ho fatto il seguente test:
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();
}
}
è possibile importare questa classe nel vostro programma e chiama il metodo isWindowsClassicLAF()
dopo aver impostato il tuo aspetto & Feel in qualsiasi punto. Ho anche fornito un esempio di come è possibile ascoltare le modifiche al tema in fase di esecuzione.
Questo è provato e testato su XP. Se l'utente passa da un tema XP a un altro, il listener non si attiva, ma se l'utente passa da un tema a Classic, o viceversa, lo farà.
Spero che questo aiuti!
Vorrei poter contrassegnare questo come la risposta corretta! Ben fatto. –
- 1. Qt non è in grado di rilevare stampanti su Windows
- 2. Rilevare se il wifi è attivo - iOS
- 3. JS & jQuery non è in grado di rilevare elementi html e di dire che sono indefiniti
- 4. Come rilevare che Windows è bloccato?
- 5. Come posso rilevare se Dispatcher.DisableProcessing è attivo?
- 6. UITextView non è in grado di rilevare il collegamento e l'indirizzo in iOS 7
- 7. non è in grado di rilevare la connessione Internet con Raggiungibilità RaggiungibilitàForInternetConnection
- 8. Come rilevare se Daydream è attivo?
- 9. Rilevare se IME (Input Method Editor) è attivo in Silverlight
- 10. Come posso rilevare keyPress mentre non è attivo?
- 11. Utilità Diff che è in grado di riconoscere C++
- 12. non è in grado di importare com.squareup.okhttp.OkHttpClient;
- 13. Grails non è in grado di installare il plug-in
- 14. non è in grado di installare node_modules
- 15. java.lang.RuntimeException non è in grado di istanziare il servizio: java.lang.NullPointerException
- 16. javascript: rileva se il tema Windows XP o Classic è abilitato
- 17. TFS non è in grado di ripristinare il pacchetto NuGet
- 18. "Servizio di estensione rete SSL non è attivo" in IE11
- 19. Facebook non è in grado di grattare il mio url
- 20. cambia automaticamente il tema Drupal 7 attivo
- 21. SmartSVN non è in grado di identificare il file .a?
- 22. Clone Git non è in grado di creare il file
- 23. che tipo di traffic fiddler è in grado di acquisire?
- 24. javascript focus() non è attivo
- 25. Come si impone la visualizzazione del disegno di Visual Studio al rendering con il tema Classico?
- 26. Karma non è in grado di caricare plug-in junits
- 27. Drupal 7 non è in grado di installare i moduli
- 28. Libgdx su Android non è in grado di rilevare i caratteri GDX
- 29. Mostra tutti i rami che eseguono il commit A è attivo e il commit B non è attivo?
- 30. l'emulatore di Windows Phone non è stato in grado di creare la macchina virtuale
Non conosco la risposta, ma le persone che forniscono risposte non sembrano nemmeno leggere la domanda. Windows XP, Vista e 7 hanno il loro tema standard, ma possono anche essere fatti per assomigliare a Windows 2000 (il tema classico). La domanda è come scoprire quali di quelli a cui l'utente ha impostato Windows. –
@Ricky Clarkson: dalla domanda capisco che dice che imposta il "tema" a 'WindowsClassicLookAndFeel' che è un LaF in java e vuole vedere se è attualmente installato. –