package com.han.lnf;
import java.awt.AWTEvent;
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.RadialGradientPaint;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.geom.Point2D;
import java.text.ParseException;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JLayer;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.WindowConstants;
import javax.swing.plaf.LayerUI;
import javax.swing.plaf.synth.SynthLookAndFeel;
/**
* Use a spotlight layer as JLayer to render JFrame.
*
* @author Administrator
*/
public class JSpotlightLayer extends JPanel {
private static final long serialVersionUID = -3416068588759196883L;
private static JButton orderButton;
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
createAndShowGUI();
}
});
}
private static void createAndShowGUI() {
initLookAndFeel();// specify the L&F
LayerUI<JPanel> layerUI = new SpotlightLayerUI();
JPanel contentPane = new JSpotlightLayer();
JLayer<JPanel> jlayer = new JLayer<>(contentPane, layerUI);
final JFrame f = new JFrame("JSpotlightLayer");
f.add(jlayer);
f.getRootPane().setDefaultButton(orderButton);
f.setSize(270, 185);
f.setResizable(false);
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f.setVisible(true);
}
private static void initLookAndFeel() {
SynthLookAndFeel lookAndFeel = new SynthLookAndFeel();
try {
lookAndFeel.load(JSpotlightLayer.class
.getResourceAsStream("lnfimpl/synth.xml"),
JSpotlightLayer.class);
} catch (ParseException e) {
System.err.println("There is an error in parsing xml of Synth");
e.printStackTrace();
}
try {
UIManager.setLookAndFeel(lookAndFeel);
} catch (UnsupportedLookAndFeelException e) {
System.err.println("Synth is not a supported look and feel");
e.printStackTrace();
}
}
private static class SpotlightLayerUI extends LayerUI<JPanel> {
private static final long serialVersionUID = -2815331572730280489L;
private boolean mActive;
private int mX, mY;
@Override
public void installUI(JComponent c) {
super.installUI(c);
@SuppressWarnings("unchecked")
JLayer<JPanel> jlayer = (JLayer<JPanel>) c;
jlayer.setLayerEventMask(AWTEvent.MOUSE_EVENT_MASK
| AWTEvent.MOUSE_MOTION_EVENT_MASK);
}
@Override
public void uninstallUI(JComponent c) {
super.uninstallUI(c);
@SuppressWarnings("unchecked")
JLayer<JPanel> jlayer = (JLayer<JPanel>) c;
jlayer.setLayerEventMask(0);
}
@Override
public void paint(Graphics g, JComponent c) {
super.paint(g, c);
Graphics2D g2 = (Graphics2D) g.create();
if (mActive) {
/* Create a radial gradient, transparent in the middle */
Point2D center = new 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<? extends JPanel> l) {
if (e.getID() == MouseEvent.MOUSE_ENTERED) {
mActive = true;
} else if (e.getID() == MouseEvent.MOUSE_EXITED) {
mActive = false;
}
l.repaint();
}
@Override
protected void processMouseMotionEvent(MouseEvent e,
JLayer<? extends JPanel> l) {
Point p = SwingUtilities.convertPoint(e.getComponent(),
e.getPoint(), l);
mX = p.x;
mY = p.y;
l.repaint();
}
}
JSpotlightLayer() {
ButtonGroup entreeGroup = new ButtonGroup();
JRadioButton radioButton = new JRadioButton("Beef", true);
JRadioButton radioButton2 = new JRadioButton("Chicken");
JRadioButton radioButton3 = new JRadioButton("Vegetable");
entreeGroup.add(radioButton);
entreeGroup.add(radioButton2);
entreeGroup.add(radioButton3);
JCheckBox jCheckBox = new JCheckBox("Ketchup");
JCheckBox jCheckBox2 = new JCheckBox("Mustard");
JCheckBox jCheckBox3 = new JCheckBox("Pickles");
JLabel label = new JLabel("Special requests:");
JTextField tf = new JTextField(15);
final JLabel info = new JLabel();
info.setName("customLabel");
orderButton = new JButton("Place Order");
orderButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
info.setText("default button clicked");
}
});
JButton cancelButton = new JButton("Cancel");
cancelButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
info.setText("cancel button clicked");
}
});
add(radioButton);
add(radioButton2);
add(radioButton3);
add(jCheckBox);
add(jCheckBox2);
add(jCheckBox3);
add(label);
add(tf);
add(orderButton);
add(cancelButton);
add(info);
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
Swing换肤——JavaSE技术
共26个文件
png:20个
java:5个
xml:1个
5星 · 超过95%的资源 需积分: 34 83 下载量 117 浏览量
2013-12-31
18:04:00
上传
评论 3
收藏 24KB ZIP 举报
温馨提示
JavaSE JFC技术 (AWT + Swing + Graphics2D):完全不改变原生Swing代码,换肤。
资源推荐
资源详情
资源评论
收起资源包目录
Swing_lnfImpl.zip (26个子文件)
com
han
lnf
lnfimpl
CheckBoxFocusedPainter.java 800B
ButtonFocusedPainter.java 787B
PanelPainter.java 1KB
radiobutton
graphics
rb_un_disable.png 612B
rb_normal.png 811B
rb_un_pressed.png 887B
rb_disable.png 782B
rb_pressed.png 1KB
rb_un_normal.png 622B
synth.xml 9KB
button
graphics
btn_general_pressed.png 507B
btn_general_normal.png 226B
btn_general_hover.png 462B
btn_disabled.png 275B
btn_special.png 562B
textfield
graphics
text_field_pressed.png 528B
text_field_normal.png 461B
text_field_disabled.png 410B
RadioButtonFocusedPainter.java 658B
checkbox
graphics
cb_un_normal.png 281B
cb_pressed.png 870B
cb_disable.png 584B
cb_un_disable.png 270B
cb_un_pressed.png 591B
cb_normal.png 644B
JSpotlightLayer.java 6KB
共 26 条
- 1
fearlessMore
- 粉丝: 200
- 资源: 17
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页