在Windows 7中,如果通過控制面板 - >外觀和個性化 - >顯示「使文本和其他項大於或小於」更改字體大小,它不僅調整菜單大小,還有記事本,寫字板,Firefox等應用程序的文本內容大小。Java自動調整到Windows 7字體大小調整
有沒有辦法讓Java自動縮放字體而不必手動縮放呢?
在Windows 7中,如果通過控制面板 - >外觀和個性化 - >顯示「使文本和其他項大於或小於」更改字體大小,它不僅調整菜單大小,還有記事本,寫字板,Firefox等應用程序的文本內容大小。Java自動調整到Windows 7字體大小調整
有沒有辦法讓Java自動縮放字體而不必手動縮放呢?
這完全取決於您使用的GUI工具包。我幾乎可以確定SWT會自動選擇新的尺寸(因爲它使用了原生的小部件)。對於我所知道的所有AWT來說都是如此。你能指定你正在使用什麼工具箱,以及你是否已經確定它沒有做你想做的事情(可能如何)?
有兩個部分是:
揮杆,第一部分是容易 - 這一切都始於一個電話。
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
在Windows上,這會導致它尊重您的小/大字體(DPI)設置。
下面是一個簡單的測試程序,我扔在一起,展示了它的外觀我的機器在Windows 7 @ 96DPI(正常字體大小)和兩個截圖@ 144dpi(150%)
首先默認字體大小樣品:
與更大的(150%)的字體大小集合目前:
運行之間沒有代碼變化,只用新的DPI設置重新註銷&。爲了證明我的容器尺寸不縮放,我設置了一個固定的框架大小,這使得我的標籤被推下來以適應。
這裏是我的源代碼 - 切&粘貼和自己運行它:
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
public class SwingFontTest
{
private static void createGUI()
{
JButton button = new JButton("my button with Some Text");
JLabel label = new JLabel("and a label");
JPanel panel = new JPanel(new FlowLayout());
panel.add(button);
panel.add(label);
JFrame frame = new JFrame("Title!");
frame.setContentPane(panel);
frame.setSize(300,125);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public static void main(String[] args)
{
try
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch (Exception e)
{
e.printStackTrace();
}
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run()
{
createGUI();
}
});
}
}
外觀&感覺提供的默認大小,但它是由圖形用戶界面筆者在自己的佈局使用可伸縮的單位。它確實需要付出努力(可擴展的佈局也是網頁上的一種痛苦!),但它絕對是可以實現的。
我推薦使用FormLayout這樣的佈局,這樣可以用對話框單位(DLU)定義您的佈局,因爲這些按DPI進行縮放。這將使您能夠擴大容器規模,並有助於限制行爲,如標籤由於大小而移動到下一行。如果使用對話框單位確定了框架的大小,那麼可以使它看起來相同,只有更大。
現在已經遲到了 - 現在就是這樣。