corejava第10版
This commit is contained in:
1 parent
2021c3c227
commit
6165543dd3
1088 files changed
+94411
No files matched your search
@@ -0,0 +1,125 @@
|
||||
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; }
|
||||
}
|
||||
Reference in new issue
Block a user