我们来自五湖四海,不为别的,只因有共同的爱好,为中国互联网发展出一分力!

jdk1.7的新特性

2011年12月31日11:00 阅读: 18538 次

标签: Java, jdk, 1.7

?jdk7 增加了一个JLayer,用于在控件上方绘制一个新的图层。当然jdk6里只要在paint里也能做到,不过新特性方便了很多,最少你可以方便的为Jdk代码添加这些新特性。

public class Diva {
? public static void main(String[] args) {
??? javax.swing.SwingUtilities.invokeLater(new Runnable() {
????? public void run() {
??????? createUI();
????? }
??? });
? }

? public static void createUI() {
??? JFrame f = new JFrame ("Diva");
???
??? LayerUI layerUI = new SpotlightLayerUI();
??? JPanel panel = createPanel();
??? JLayer jlayer = new JLayer(panel, layerUI);
???
??? f.add (jlayer);
???
??? f.setSize(300, 200);
??? f.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
??? f.setLocationRelativeTo (null);
??? f.setVisible (true);
? }

? private static JPanel createPanel() {
??? JPanel p = new JPanel();

??? ButtonGroup entreeGroup = new ButtonGroup();
??? JRadioButton radioButton;
??? p.add(radioButton = new JRadioButton("Beef", true));
??? entreeGroup.add(radioButton);
??? p.add(radioButton = new JRadioButton("Chicken"));
??? entreeGroup.add(radioButton);
??? p.add(radioButton = new JRadioButton("Vegetable"));
??? entreeGroup.add(radioButton);

??? p.add(new JCheckBox("Ketchup"));
??? p.add(new JCheckBox("Mustard"));
??? p.add(new JCheckBox("Pickles"));

??? p.add(new JLabel("Special requests:"));
??? p.add(new JTextField(20));

??? JButton orderButton = new JButton("Place Order");
??? p.add(orderButton);

??? return p;
? }
}

class SpotlightLayerUI extends LayerUI {
? private boolean mActive;
? private int mX, mY;

? @Override
? public void installUI(JComponent c) {
??? super.installUI(c);
??? JLayer jlayer = (JLayer)c;
??? jlayer.setLayerEventMask(
????? AWTEvent.MOUSE_EVENT_MASK |
????? AWTEvent.MOUSE_MOTION_EVENT_MASK
??? );
? }

? @Override
? public void uninstallUI(JComponent c) {
??? JLayer jlayer = (JLayer)c;
??? jlayer.setLayerEventMask(0);
??? super.uninstallUI(c);
? }

? @Override
? public void paint (Graphics g, JComponent c) {
??? Graphics2D g2 = (Graphics2D)g.create();

??? // Paint the view.
??? super.paint (g2, c);

??? if (mActive) {
????? // Create a radial gradient, transparent in the middle.
????? java.awt.geom.Point2D center = new java.awt.geom.Point2D.Float(mX, mY);
????? float radius = 72;
????? float[] dist = {0.0f, 1.0f};
????? Color[] colors = {new Color(0.0f, 0.0f, 0.0f, 0.0f), Color.BLACK};
????? RadialGradientPaint p =
????????? new RadialGradientPaint(center, radius, dist, colors);
????? g2.setPaint(p);
????? g2.setComposite(AlphaComposite.getInstance(
????????? AlphaComposite.SRC_OVER, .6f));
????? g2.fillRect(0, 0, c.getWidth(), c.getHeight());
??? }

??? g2.dispose();
? }

? @Override
? protected void processMouseEvent(MouseEvent e, JLayer l) {
??? if (e.getID() == MouseEvent.MOUSE_ENTERED) mActive = true;
??? if (e.getID() == MouseEvent.MOUSE_EXITED) mActive = false;
??? l.repaint();
? }

? @Override
? protected void processMouseMotionEvent(MouseEvent e, JLayer l) {
??? Point p = SwingUtilities.convertPoint(e.getComponent(), e.getPoint(), l);
??? mX = p.x;
??? mY = p.y;
??? l.repaint();
? }

分享到: 更多
蓝客门户