📄 renderqualitytest.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 + -