126 lines
3.7 KiB
Java
126 lines
3.7 KiB
Java
package renderQuality;
|
|
|
|
import java.awt.*;
|
|
import java.awt.geom.*;
|
|
|
|
import javax.swing.*;
|
|
|
|
/**
|
|
* This frame contains buttons to set rendering hints and an image that is drawn with the selected
|
|
* hints.
|
|
*/
|
|
public class RenderQualityTestFrame extends JFrame
|
|
{
|
|
private RenderQualityComponent canvas;
|
|
private JPanel buttonBox;
|
|
private RenderingHints hints;
|
|
private int r;
|
|
|
|
public RenderQualityTestFrame()
|
|
{
|
|
buttonBox = new JPanel();
|
|
buttonBox.setLayout(new GridBagLayout());
|
|
hints = new RenderingHints(null);
|
|
|
|
makeButtons("KEY_ANTIALIASING", "VALUE_ANTIALIAS_OFF", "VALUE_ANTIALIAS_ON");
|
|
makeButtons("KEY_TEXT_ANTIALIASING", "VALUE_TEXT_ANTIALIAS_OFF", "VALUE_TEXT_ANTIALIAS_ON");
|
|
makeButtons("KEY_FRACTIONALMETRICS", "VALUE_FRACTIONALMETRICS_OFF",
|
|
"VALUE_FRACTIONALMETRICS_ON");
|
|
makeButtons("KEY_RENDERING", "VALUE_RENDER_SPEED", "VALUE_RENDER_QUALITY");
|
|
makeButtons("KEY_STROKE_CONTROL", "VALUE_STROKE_PURE", "VALUE_STROKE_NORMALIZE");
|
|
canvas = new RenderQualityComponent();
|
|
canvas.setRenderingHints(hints);
|
|
|
|
add(canvas, BorderLayout.CENTER);
|
|
add(buttonBox, BorderLayout.NORTH);
|
|
pack();
|
|
}
|
|
|
|
/**
|
|
* 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, new GBC(0, r).setAnchor(GBC.WEST));
|
|
ButtonGroup group = new ButtonGroup();
|
|
JRadioButton b1 = new JRadioButton(value1, true);
|
|
|
|
buttonBox.add(b1, new GBC(1, r).setAnchor(GBC.WEST));
|
|
group.add(b1);
|
|
b1.addActionListener(event ->
|
|
{
|
|
hints.put(k, v1);
|
|
canvas.setRenderingHints(hints);
|
|
});
|
|
JRadioButton b2 = new JRadioButton(value2, false);
|
|
|
|
buttonBox.add(b2, new GBC(2, r).setAnchor(GBC.WEST));
|
|
group.add(b2);
|
|
b2.addActionListener(event ->
|
|
{
|
|
hints.put(k, v2);
|
|
canvas.setRenderingHints(hints);
|
|
});
|
|
hints.put(k, v1);
|
|
r++;
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* This component produces a drawing that shows the effect of rendering hints.
|
|
*/
|
|
class RenderQualityComponent extends JComponent
|
|
{
|
|
private static final Dimension PREFERRED_SIZE = new Dimension(750, 150);
|
|
private RenderingHints hints = new RenderingHints(null);
|
|
private Image image;
|
|
|
|
public RenderQualityComponent()
|
|
{
|
|
image = new ImageIcon(getClass().getResource("face.gif")).getImage();
|
|
}
|
|
|
|
public void paintComponent(Graphics g)
|
|
{
|
|
Graphics2D g2 = (Graphics2D) g;
|
|
g2.setRenderingHints(hints);
|
|
|
|
g2.draw(new Ellipse2D.Double(10, 10, 60, 50));
|
|
g2.setFont(new Font("Serif", Font.ITALIC, 40));
|
|
g2.drawString("Hello", 75, 50);
|
|
|
|
g2.draw(new Rectangle2D.Double(200, 10, 40, 40));
|
|
g2.draw(new Line2D.Double(201, 11, 239, 49));
|
|
|
|
g2.drawImage(image, 250, 10, 100, 100, null);
|
|
}
|
|
|
|
/**
|
|
* Sets the hints and repaints.
|
|
* @param h the rendering hints
|
|
*/
|
|
public void setRenderingHints(RenderingHints h)
|
|
{
|
|
hints = h;
|
|
repaint();
|
|
}
|
|
|
|
public Dimension getPreferredSize() { return PREFERRED_SIZE; }
|
|
}
|