我打電話給UIManager.getSystemLookAndFeelClassName()。 即使將當前主題設置爲WindowsClassicLookAndFeel,也會得到WindowsLookAndFeel的結果。但我期望WindowsClassicLookAndFeel。 問題是我如何檢測Windows經典主題現在是活動的無法檢測到窗口經典主題活動
回答
我不太確定你在問什麼。
如果您問的是SWING當前正在使用的主題/外觀,請嘗試使用 UIManager.getSystemLookAndFeelClassName()。
如果您試圖找出Windows正在使用哪個主題 - 我不知道。可能不太容易發現。 (除了使用JNA/JNA直接查詢某些Windows API的哪個主題被使用)將創建一個新的JFrame,將它放置在某個區域,捕獲一小部分該邊框並將其與邊界樣本進行比較(您需要事先創建並隨代碼一起提供,以便能夠以編程方式比較剛剛拍攝的屏幕捕獲位和您發貨的所有邊框圖像)
是的,類似這樣的,但有com.sun.java.swing.plaf.windows.WindowsLookAndFeel和com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel,但UIManager.getSystemLookAndFeelClassName()只返回com.sun。 java.swing.plaf.windows.WindowsLookAndFeel即使應用了經典的Windows主題。 – fland 2010-09-07 13:43:38
你給一個javadoc鏈接,甚至沒有讀取該方法正在做什麼。 – 2010-09-07 15:31:17
@tulskiy fland最近重新提出了他的問題,所以我只能猜測他在問什麼。因此我的回答沒有多大意義了。 – Tedil 2010-09-08 12:38:31
UIManager.getLookAndFeel()
返回當前安裝的LaF。 getSystemLookAndFeel()
返回看起來像是當前系統的主題,例如WindowsLookAndFeel on Windows GTKLookAndFeel Linux上的MOirtLookAndFeel等
它沒有回答,OP如何檢測經典主題是否安裝。 – 2013-01-28 13:31:43
它看起來像你註冊專門問這個問題,現在我特地註冊回答它!我是谷歌搜索的東西完全不同,但我很好奇,做了一些實驗,這裏是我發現的:
你是對的WindowsClassicLookAndFeel
。該課程擴展了WindowsLookAndFeel
,但不覆蓋任何內容,即使在Windows Classic處於活動狀態時也不會被使用。所以,我查看了WindowsLookAndFeel
的代碼,並發現了一些引用包私有類XPStyle
的有趣內部代碼。這個類似乎是一個單身主義者和getter方法,getXP()
,只有在「XP」的主題是積極的返回它的實例:
/**
* 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;
}
有趣的是,WindowsClassicLookAndFeel
代碼再次檢查,但我們知道,這是不不再使用(也許它已經改變)......但最好的部分是從代碼中提取此桌面屬性win.xpstyle.themeActive
檢查,我做了如下試驗:
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();
}
}
可以導入這個類到你的程序和設置完Look後請撥打isWindowsClassicLAF()
方法&感受在任何時候。我還給出了一個例子,說明如何在運行時聆聽主題的變化。
這是在XP上嘗試和測試的。如果用戶從一個XP主題更改爲另一個主題,則該偵聽器不會觸發,但如果用戶從主題更改爲經典,或反之亦然,則會執行此操作。
我希望有幫助!
希望我可以將此標記爲正確答案!路要走。 – 2013-06-25 19:07:43
- 1. 活動窗口檢測
- 2. 在iframe中檢測活動窗口
- 3. ActiveMQ-如何檢測非活動主題
- 4. qt在Windows 7經典主題快速透明窗口
- 5. 無法檢測窗口是否加載
- 6. 無法從我的活動訪問主窗口/佈局
- 7. Autohotkey無法識別活動窗口?
- 8. 檢測WPF中的Aero或經典主題
- 9. 無法激活Excel窗口
- 10. 檢測標籤/窗口激活JavaScript中
- 11. 活動主題無法正確顯示
- 12. yii中的經典主題
- 13. WPF選項經典主題
- 14. PyWin32:Windows經典主題
- 15. ClickOnce和非活動主窗口
- 16. 「主題已經開始」恢復活動
- 17. 點擊鏈接後,Selenium將無法檢測到新窗口
- 18. WPF關閉除活動的子窗口和主窗口
- 19. 如何正確檢測主題窗口的角半徑
- 20. Prestashop主題未檢測到
- 21. 用KDE檢測python中的活動窗口
- 22. 在C中檢測活動/聚焦窗口#
- 23. eclipse的活動窗口中的關鍵檢測
- 24. 在Java中檢測窗口不活動狀態
- 25. 如何將網站加載到主活動窗口而不是新窗口?
- 26. 檢測窗口標題欄的高度
- 27. 無法檢測到Windows Phone中的主題變化
- 28. 自動測試經典ASP
- 29. 經典ASP和窗口寬度
- 30. 無法連接到SQL Server Express的本地主機經典ASP
我不知道答案,但提供答案的人似乎甚至沒有看到這個問題。 Windows XP,Vista和7有他們的標準主題,但也可以看起來像Windows 2000(經典主題)。問題是如何檢測哪些用戶已將Windows設置爲。 – 2010-09-07 15:52:28
@Ricky Clarkson:從這個問題我明白,他說他將「主題」設置爲'WindowsClassicLookAndFeel',它是一個Java中的LaF,並且想要查看它是否已安裝。 – 2010-09-08 03:12:03