⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 renderqualitytest.java

📁 java核心技术源代码
💻 JAVA
字号:
/**
   @version 1.01 2001-07-24
   @author Cay Horstmann
*/

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.io.*;
import java.util.*;
import javax.imageio.*;
import javax.swing.*;

/**
   This program demonstrates the effect of the various
   rendering hints.
*/
public class RenderQualityTest
{  
   public static void main(String[] args)
   {  
      JFrame frame = new RenderQualityTestFrame();
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.show();
   }
}

/**
   This frame contains buttons to set rendering hints 
   and an image that is drawn with the selected hints.
*/
class RenderQualityTestFrame extends JFrame
{  
   public RenderQualityTestFrame()
   {  
      setTitle("RenderQualityTest");
      setSize(WIDTH, HEIGHT);

      buttonBox = new JPanel();
      buttonBox.setLayout(new GridLayout(9, 3));
      hints = new RenderingHints(null);

      makeButtons("KEY_ANTIALIASING",
         "VALUE_ANTIALIAS_ON",
         "VALUE_ANTIALIAS_OFF");
      makeButtons("KEY_RENDERING",
         "VALUE_RENDER_QUALITY",
         "VALUE_RENDER_SPEED");
      makeButtons("KEY_DITHERING",
         "VALUE_DITHER_ENABLE",
         "VALUE_DITHER_DISABLE");
      makeButtons("KEY_TEXT_ANTIALIASING",
         "VALUE_TEXT_ANTIALIAS_ON",
         "VALUE_TEXT_ANTIALIAS_OFF");
      makeButtons("KEY_FRACTIONALMETRICS",
         "VALUE_FRACTIONALMETRICS_ON",
         "VALUE_FRACTIONALMETRICS_OFF");
      makeButtons("KEY_ALPHA_INTERPOLATION",
         "VALUE_ALPHA_INTERPOLATION_QUALITY",
         "VALUE_ALPHA_INTERPOLATION_SPEED");
      makeButtons("KEY_COLOR_RENDERING",
         "VALUE_COLOR_RENDER_QUALITY",
         "VALUE_COLOR_RENDER_SPEED");
      makeButtons("KEY_INTERPOLATION",
         "VALUE_INTERPOLATION_NEAREST NEIGHBOR",
         "VALUE_INTERPOLATION_BILINEAR");
      makeButtons("KEY_STROKE_CONTROL",
         "VALUE_STROKE_NORMALIZE",
         "VALUE_STROKE_PURE");

      Container contentPane = getContentPane();
      canvas = new RenderQualityPanel();
      contentPane.add(canvas, BorderLayout.CENTER);
      contentPane.add(buttonBox, BorderLayout.NORTH);
   }

   /**
      Makes a set of buttons for a rendering hint key and values
      @param key the key name
      @param value1 the name of the first value for the key
      @param value2 the name of the second value for the key
   */
   void makeButtons(String key, String value1, String value2)
   {  
      try
      {
         final RenderingHints.Key k = (RenderingHints.Key)
            RenderingHints.class.getField(key).get(null);
         final Object v1 
            = RenderingHints.class.getField(value1).get(null);
         final Object v2
            = RenderingHints.class.getField(value2).get(null);
         JLabel label = new JLabel(key);
         buttonBox.add(label);
         ButtonGroup group = new ButtonGroup();
         JRadioButton b1 = new JRadioButton(value1, true);
         buttonBox.add(b1);
         group.add(b1);
         b1.addActionListener(new 
            ActionListener()
            {
               public void actionPerformed(ActionEvent event)
               {
                  hints.put(k, v1);
                  canvas.setRenderingHints(hints);
               }
         });
         JRadioButton b2 = new JRadioButton(value2, false);
         buttonBox.add(b2);
         group.add(b2);
         b2.addActionListener(new 
            ActionListener()
            {
               public void actionPerformed(ActionEvent event)
               {
                  hints.put(k, v2);
                  canvas.setRenderingHints(hints);
               }
         });
         hints.put(k, v1);
      }
      catch (Exception ex)
      {
      }
   }

   private RenderQualityPanel canvas;
   private JPanel buttonBox;
   private RenderingHints hints;
   private static final int WIDTH = 600;
   private static final int HEIGHT = 500;
}

/**
   This panel produces a drawing that hopefully shows some
   of the difference caused by rendering hints.
*/
class RenderQualityPanel extends JPanel
{  
   public RenderQualityPanel()
   {  
      color1 = new Color(0.7F, 0.7F, 0.0F, 0.5F);
      color2 = new Color(0.0F, 0.3F, 0.3F, 0.5F);
      try
      {
         image = ImageIO.read(new File("clouds.jpg"));
      }
      catch (IOException exception)
      {
         exception.printStackTrace();
      }
   }

   public void paintComponent(Graphics g)
   {  
      super.paintComponent(g);
      Graphics2D g2 = (Graphics2D)g;
      g2.setRenderingHints(hints);

      g2.drawImage(image, 0, 0, null);
      g2.draw(new Ellipse2D.Double(0, 0,
         image.getWidth(null), image.getHeight(null)));
      g2.setFont(new Font("Serif", Font.ITALIC, 40));
      g2.drawString("Hello", 75, 75);
      g2.setPaint(color1);
      g2.translate(0,-80);
      g2.fill(new Rectangle2D.Double(100, 100, 200, 100));
      g2.setPaint(color2);
      g2.fill(new Rectangle2D.Double(120, 120, 200, 100));
   }

   /**
      Sets the hints and repaints.
      @param h the rendering hints
   */
   public void setRenderingHints(RenderingHints h)
   {  
      hints = h;
      repaint();
   }

   private RenderingHints hints = new RenderingHints(null);
   private Color color1;
   private Color color2;
   private Image image;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -