2010-01-11 118 views
10

在Windows 7中,如果通過控制面板 - >外觀和個性化 - >顯示「使文本和其他項大於或小於」更改字體大小,它不僅調整菜單大小,還有記事本,寫字板,Firefox等應用程序的文本內容大小。Java自動調整到Windows 7字體大小調整

有沒有辦法讓Java自動縮放字體而不必手動縮放呢?

回答

0

這完全取決於您使用的GUI工具包。我幾乎可以確定SWT會自動選擇新的尺寸(因爲它使用了原生的小部件)。對於我所知道的所有AWT來說都是如此。你能指定你正在使用什麼工具箱,以及你是否已經確定它沒有做你想做的事情(可能如何)?

6

有兩個部分是:

  1. 讓您的組件,字體等 規模
  2. 讓您的佈局,以 規模

揮杆,第一部分是容易 - 這一切都始於一個電話。

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 

在Windows上,這會導致它尊重您的小/大字體(DPI)設置。

下面是一個簡單的測試程序,我扔在一起,展示了它的外觀我的機器在Windows 7 @ 96DPI(正常字體大小)和兩個截圖@ 144dpi(150%)

首先默認字體大小樣品:

Swing app with Windows using normal font sizes

與更大的(150%)的字體大小集合

目前:

Swing app with Windows using Larger font sizes

運行之間沒有代碼變化,只用新的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進行縮放。這將使您能夠擴大容器規模,並有助於限制行爲,如標籤由於大小而移動到下一行。如果使用對話框單位確定了框架的大小,那麼可以使它看起來相同,只有更大。

現在已經遲到了 - 現在就是這樣。