Swing


          天行健 君子以自強不息

          posts - 69, comments - 215, trackbacks - 0, articles - 16
             :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          nativeFont和logicalFont在JDK1.4下的重大效率差異

          Posted on 2010-08-02 21:32 zht 閱讀(395) 評論(0)  編輯  收藏 所屬分類: J2SE

          最近遇到一個很奇怪的問題,寫了一個界面程序,剛開始沒有 設置字體,效率還可以,但是默認字體看著比較難看,就改用了一個字體,誰知道在jdk1.4批量測試過程中,效率居然比原來要低非常非常的多。
          后來發現如果是jdk1.5及以上版本兩者效率幾乎一樣,見附件截圖。
          而且就Swing效率和增強功能來講,JDK1.6u10及以上版本有非常大的提高,
          所以如果條件運行,還是建議都改成JDK1.6u10及以上版本

          測試代碼如下:


          public class FontDemo extends JPanel {

              
          public static void main(String[] args) {
                  JFrame f 
          = new JFrame();
                  f.setTitle(
          "TWaver中文社區");
                  f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                  f.setContentPane(
          new FontDemo());
                  f.setSize(
          800600);
                  f.setLocationRelativeTo(
          null);
                  f.setVisible(
          true);
              }


              
          private TDataBox box = new TDataBox();
              
          private BarChart chart = new BarChart(box);

              
          private static final int times = 1000;
              
          private static final int style = Font.BOLD;
              
          private static final int size = 16;

              
          public FontDemo() {
                  initBox();
                  initChart();
                  initGUI();
              }


              
          private void initGUI() {
                  
          this.setLayout(new BorderLayout());

                  JScrollPane pane 
          = new JScrollPane(chart.getLegendPane());

                  
          this.add(chart, BorderLayout.CENTER);
                  
          this.add(pane, BorderLayout.EAST);
              }


              
          private void initBox() {
                  
          final List localFonts = new ArrayList();
                  List nativeFonts 
          = new ArrayList();

                  
          // get all available fontFamily names
                  Font[] fonts = SunGraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts();
                  
          for (int i = 0; i < fonts.length; i++{
                      
          // separate logical and native font
                      if (SunGraphicsEnvironment.isLogicalFont(fonts[i])) {
                          localFonts.add(fonts[i]);
                      }

                      
          else {
                          nativeFonts.add(fonts[i]);
                      }

                  }


                  System.out.println(
          "///////////// localFonts test /////////////");
                  
          for (int i = 0; i < localFonts.size(); i++{
                      Font font 
          = (Font) localFonts.get(i);
                      
          long start = System.currentTimeMillis();
                      
          for (int k = 0; k < times; k++{
                          createFont(font);
                      }

                      
          long spendTime = System.currentTimeMillis() - start;
                      Node n 
          = new Node();
                      n.setName(font.getName());
                      n.putChartValue(spendTime);
                      n.putChartColor(Color.GREEN);
                      box.addElement(n);
                      
          //            System.out.println(">" + spendTime + "\t" + font.getName());
                  }

                  System.out.println(
          "\n///////////// nativeFonts test /////////////");
                  
          for (int i = 0; i < nativeFonts.size(); i++{
                      Font font 
          = (Font) nativeFonts.get(i);
                      
          long start = System.currentTimeMillis();
                      
          for (int k = 0; k < times; k++{
                          createFont(font);
                      }

                      
          long spendTime = System.currentTimeMillis() - start;
                      Node n 
          = new Node();
                      n.setName(font.getName());
                      n.putChartValue(spendTime);
                      n.putChartColor(Color.RED);
                      box.addElement(n);
                      
          //            System.out.println(">" + spendTime + "\t" + font.getName());
                  }

                  System.out.println(
          "\n$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
              }


              
          private void createFont(Font font) {
                  
          //     font.deriveFont(style, size);
                  new Font(font.getName(), style, size);
              }


              
          private void initChart() {
                  chart.setLegendLayout(TWaverConst.LEGEND_LAYOUT_VERTICAL);
                  chart.setLegendOrientation(TWaverConst.LABEL_ORIENTATION_HORIZONTAL);
                  chart.setYScaleTextVisible(
          true);
                  chart.setShadowOffset(
          1);
              }

          }



          1.4測試結果


          1.6測試結果



          原帖地址

          主站蜘蛛池模板: 鄂尔多斯市| 沁阳市| 广东省| 沿河| 汽车| 防城港市| 颍上县| 读书| 瑞昌市| 灵寿县| 大余县| 东平县| 沐川县| 沾益县| 聂荣县| 昭觉县| 武隆县| 镇雄县| 会同县| 海盐县| 睢宁县| 太保市| 商水县| 延寿县| 通州区| 韶山市| 藁城市| 汶上县| 报价| 绥滨县| 永州市| 高雄县| 潜山县| 铜川市| 拜泉县| 徐州市| 凤凰县| 郁南县| 元阳县| 尼勒克县| 仙居县|