簡體   English   中英

Java Swing:系統范圍內的組件可擴展嗎?

[英]Java Swing: System-wide components scale?

有沒有一種方法可以通過單個因素擴展應用程序中的所有Swing組件? 我有一個現有的Swing應用程序,我想以兩倍大小顯示所有組件。 這可能嗎?

編輯:

我正在將Java Swing應用程序移植到Sugar(OLPC XO圖形環境)。 我沒有輔助功能。 機器在7.5英寸顯示屏上只有一種分辨率1200x900。 因此,組件非常小且不可讀。

  • 可以通過使用Nimbus外觀來縮放Swing JComponents

  • 修改Nimbus L&F,其ColorInsetsBounds ei非常復雜,但以純格式形式沒有任何問題

不幸的是,Swing中沒有這樣的標准功能。

應用程序中每個組件的大小取決於添加組件的容器的布局以及組件的用戶界面提供的組件的首選/最小大小。

因此,最好的方法(如我所見)是修改標准UI,以便它們提供額外的首選大小(在您的情況下為兩倍)。 但是您將必須針對某個特定類型的每個組件(按鈕/復選框/表/樹/滾動條等)分別執行此操作。 另外,您不能更改系統用戶界面-您只能擴展一些跨平台的外觀和感覺,例如Metal LaF,並且在使用本機外觀時完全沒有用。

不過,您可以更改一些默認的L&F屬性,例如font:

UIManager.put ( "Button.font", new FontUIResource ( new Font ( "Arial", Font.BOLD, 20 ) ) );

此特定情況僅更改按鈕的字體。 您可以在任何LookAndFeel類中找到許多其他組件字體屬性(例如BasicLookAndFeel)。

如果你放

System.setProperty("sun.java2d.uiScale","2")

在您的主要方法的最開始,這將使整個應用程序縮放2倍。其他縮放因子也是可能的。 如果已成功在Windows 7和Linux以及KDE(系統外觀都很好)上使用openJDK 11進行了成功嘗試。 Windows確實接受分數比例因子,而KDE則不接受。

如果您不想修改源代碼,則jvm的命令行選項將具有相同的效果:

java -Dsun.java2d.uiScale = 2 -jar myApp.jar

您可以為此使用J(X)Layer(請參閱www.pbjar.org/blogs/jxlayer/,但此刻站點似乎已關閉)。 在此基礎上可以找到一個示例: http : //patrickwebster.blogspot.com/2009/01/scalable-jfreechart-applet.html

我不是專家,而是一個想法。 也許您可以將有問題的組件子類化,然后在重寫的構造函數中,您可以調用

setBounds() 

要么

setPreferredSize()

但是我確實相信您需要使用null布局才能起作用。

[如果我錯了,請糾正我!]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM