} private synchronized void applyShape() { if (!isShapingSupported) { return; } if (shapeListener != null) { shapeListener.componentResized(null); return; } panel.updateUI(); final TranslucentWindow fd = frame; fd.addComponentListener(shapeListener = new ComponentAdapter() { // @Override public void componentResized(ComponentEvent evt) { Shape shape = null; if (roundedRectangle.isSelected()) { shape = new RoundRectangle2D.Float(0, 0, fd.getWidth(), fd.getHeight(), 100, 100);
} else if (Oval.isSelected()) { shape = new Ellipse2D.Float(0, 0, fd.getWidth(), fd.getHeight()); } AWTUtilities.setWindowShape(fd, shape); } });
}
public void center(){ Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); frame.setLocation((d.width-frame.getWidth())/2, (d.height-frame.getHeight())/2); } public static void main(String args[]){ new TranslucentWindow().setVisible(true); } }
//package com.flyingwind.tutorial;import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Paint;
import java.awt.Shape;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.geom.Ellipse2D;
import java.awt.geom.RoundRectangle2D;import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JSlider;
import javax.swing.SpringLayout;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;import com.sun.awt.AWTUtilities;public class TranslucentWindow extends JFrame{
private SpringLayout springLayout_1;
private ButtonGroup buttonGroup = new ButtonGroup();
/**
*
*/
private static final long serialVersionUID = 1L;
private boolean isShapingSupported;
private boolean isOpacityControlSupported;
private boolean isTranslucencySupported;
private GraphicsConfiguration translucencyCapableGC;
private ComponentListener shapeListener = null;
TranslucentWindow frame = this;
private JRadioButton roundedRectangle;
private JRadioButton Oval;
private JCheckBox paintGradiCheckBox;
private JPanel panel;
//@SuppressWarnings("serial")
public TranslucentWindow(){
translucencyCapableGC = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration();
isShapingSupported = AWTUtilities.isTranslucencySupported(AWTUtilities.Translucency.PERPIXEL_TRANSPARENT);
isOpacityControlSupported = AWTUtilities.isTranslucencySupported(AWTUtilities.Translucency.TRANSLUCENT);
isTranslucencySupported = AWTUtilities.isTranslucencySupported(AWTUtilities.Translucency.PERPIXEL_TRANSLUCENT); if(AWTUtilities.isTranslucencyCapable(translucencyCapableGC)){
translucencyCapableGC = null;
GraphicsEnvironment env =
GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice[] devices = env.getScreenDevices();
for (int i = 0; i < devices.length && translucencyCapableGC == null; i++) {
GraphicsConfiguration[] configs = devices[i].getConfigurations();
for (int j = 0; j < configs.length && translucencyCapableGC == null; j++) {
if (AWTUtilities.isTranslucencyCapable(configs[j])) {
translucencyCapableGC = configs[j];
}
}
}
if (translucencyCapableGC == null) {
isTranslucencySupported = false;
}
}
setSize(new Dimension(500, 400));
getContentPane().setLayout(new BorderLayout()); panel = new JPanel(){
protected void paintComponent(Graphics g) {
if (g instanceof Graphics2D && paintGradiCheckBox.isSelected()) {
final int R = 255;
final int G = 0;
final int B = 0;
Paint p =
new GradientPaint(0.0f, 0.0f, new Color(R, G, B, 0),
getWidth(), getHeight(), new Color(R, G, B, 255), true);
Graphics2D g2d = (Graphics2D)g;
g2d.setPaint(p);
g2d.fillRect(0, 0, getWidth(), getHeight());
} else {
super.paintComponent(g);
}
}
};
springLayout_1 = new SpringLayout();
panel.setLayout(springLayout_1);
getContentPane().add(panel);
setUndecorated(true); final JButton closeButton = new JButton();
panel.add(closeButton);
springLayout_1.putConstraint(SpringLayout.EAST, closeButton, 270, SpringLayout.WEST, panel);
closeButton.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent e) {
System.exit(0);
}
});
closeButton.setText("Close"); Oval = new JRadioButton();
panel.add(Oval);
Oval.setSelected(true);
Oval.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent e) {
applyShape();
}
});
buttonGroup.add(Oval);
Oval.setText("Oval");
Oval.setEnabled(isShapingSupported); roundedRectangle = new JRadioButton();
panel.add(roundedRectangle);
springLayout_1.putConstraint(SpringLayout.NORTH, roundedRectangle, 170, SpringLayout.NORTH, panel);
springLayout_1.putConstraint(SpringLayout.WEST, roundedRectangle, 180, SpringLayout.WEST, panel);
springLayout_1.putConstraint(SpringLayout.EAST, Oval, 230, SpringLayout.WEST, panel);
springLayout_1.putConstraint(SpringLayout.WEST, Oval, 0, SpringLayout.WEST, roundedRectangle);
roundedRectangle.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent e) {
applyShape();
}
});
buttonGroup.add(roundedRectangle);
roundedRectangle.setText("Rounded rectangle ");
roundedRectangle.setEnabled(isShapingSupported); final JSlider slider = new JSlider();
slider.setPaintLabels(true);
panel.add(slider);
springLayout_1.putConstraint(SpringLayout.SOUTH, closeButton, 28, SpringLayout.SOUTH, slider);
springLayout_1.putConstraint(SpringLayout.NORTH, closeButton, 0, SpringLayout.SOUTH, slider);
springLayout_1.putConstraint(SpringLayout.EAST, slider, 345, SpringLayout.WEST, panel);
springLayout_1.putConstraint(SpringLayout.SOUTH, slider, 227, SpringLayout.NORTH, panel);
springLayout_1.putConstraint(SpringLayout.NORTH, slider, 200, SpringLayout.NORTH, panel);
slider.setValue(85);
slider.addChangeListener(new ChangeListener() {
public void stateChanged(final ChangeEvent e) {
applyOpacity(((JSlider)e.getSource()).getValue());
}
});
slider.setMinimum(5); paintGradiCheckBox = new JCheckBox();
paintGradiCheckBox.setSelected(true);
panel.add(paintGradiCheckBox);
springLayout_1.putConstraint(SpringLayout.SOUTH, Oval, 26, SpringLayout.SOUTH, paintGradiCheckBox);
springLayout_1.putConstraint(SpringLayout.NORTH, Oval, 0, SpringLayout.SOUTH, paintGradiCheckBox);
springLayout_1.putConstraint(SpringLayout.SOUTH, paintGradiCheckBox, 145, SpringLayout.NORTH, panel);
springLayout_1.putConstraint(SpringLayout.EAST, paintGradiCheckBox, 285, SpringLayout.WEST, panel);
springLayout_1.putConstraint(SpringLayout.WEST, paintGradiCheckBox, 0, SpringLayout.WEST, Oval);
paintGradiCheckBox.setText("Paint gradient");
paintGradiCheckBox.setEnabled(isTranslucencySupported); center();
} private synchronized void applyOpacity(int value) {
if (!isOpacityControlSupported) {
return;
}
panel.updateUI();
AWTUtilities.setWindowOpacity(frame, ((float) value) / 100.0f);
}
private synchronized void applyShape() {
if (!isShapingSupported) {
return;
}
if (shapeListener != null) {
shapeListener.componentResized(null);
return;
}
panel.updateUI();
final TranslucentWindow fd = frame;
fd.addComponentListener(shapeListener = new ComponentAdapter() {
// @Override
public void componentResized(ComponentEvent evt) {
Shape shape = null; if (roundedRectangle.isSelected()) {
shape = new RoundRectangle2D.Float(0, 0, fd.getWidth(), fd.getHeight(), 100, 100);
} else if (Oval.isSelected()) {
shape = new Ellipse2D.Float(0, 0, fd.getWidth(), fd.getHeight());
}
AWTUtilities.setWindowShape(fd, shape);
}
});
}
public void center(){
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
frame.setLocation((d.width-frame.getWidth())/2, (d.height-frame.getHeight())/2);
}
public static void main(String args[]){
new TranslucentWindow().setVisible(true);
}
}
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Paint;
import java.awt.Shape;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.geom.Ellipse2D;
import java.awt.geom.RoundRectangle2D;import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JSlider;
import javax.swing.SpringLayout;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;import com.sun.awt.AWTUtilities;public class TranslucentWindow extends JFrame { private SpringLayout springLayout_1; private ButtonGroup buttonGroup = new ButtonGroup();
private static final long serialVersionUID = 1L; private boolean isShapingSupported; private boolean isOpacityControlSupported; private boolean isTranslucencySupported; private GraphicsConfiguration translucencyCapableGC; private ComponentListener shapeListener = null; TranslucentWindow frame = this; private JRadioButton roundedRectangle; private JRadioButton Oval; private JCheckBox paintGradiCheckBox; private JPanel panel; // @SuppressWarnings("serial")
public TranslucentWindow() { translucencyCapableGC = GraphicsEnvironment
.getLocalGraphicsEnvironment().getDefaultScreenDevice()
.getDefaultConfiguration(); isShapingSupported = AWTUtilities
.isTranslucencySupported(AWTUtilities.Translucency.PERPIXEL_TRANSPARENT);
isOpacityControlSupported = AWTUtilities
.isTranslucencySupported(AWTUtilities.Translucency.TRANSLUCENT);
isTranslucencySupported = AWTUtilities
.isTranslucencySupported(AWTUtilities.Translucency.PERPIXEL_TRANSLUCENT); if (AWTUtilities.isTranslucencyCapable(translucencyCapableGC)) {
translucencyCapableGC = null;
GraphicsEnvironment env = GraphicsEnvironment
.getLocalGraphicsEnvironment();
GraphicsDevice[] devices = env.getScreenDevices(); for (int i = 0; i < devices.length && translucencyCapableGC == null; i++) {
GraphicsConfiguration[] configs = devices[i]
.getConfigurations();
for (int j = 0; j < configs.length
&& translucencyCapableGC == null; j++) {
if (AWTUtilities.isTranslucencyCapable(configs[j])) {
translucencyCapableGC = configs[j];
}
}
}
if (translucencyCapableGC == null) {
isTranslucencySupported = false;
}
}
setSize(new Dimension(500, 400));
getContentPane().setLayout(new BorderLayout()); panel = new JPanel() {
private static final long serialVersionUID = 2656657329972014482L; protected void paintComponent(Graphics g) {
if (g instanceof Graphics2D && paintGradiCheckBox.isSelected()) {
final int R = 255;
final int G = 0;
final int B = 0;
Paint p = new GradientPaint(0.0f, 0.0f, new Color(R, G, B,
0), getWidth(), getHeight(),
new Color(R, G, B, 255), true);
Graphics2D g2d = (Graphics2D) g;
g2d.setPaint(p);
g2d.fillRect(0, 0, getWidth(), getHeight());
} else {
super.paintComponent(g);
}
}
};
springLayout_1 = new SpringLayout();
panel.setLayout(springLayout_1);
getContentPane().add(panel);
setUndecorated(true); final JButton closeButton = new JButton();
panel.add(closeButton);
springLayout_1.putConstraint(SpringLayout.EAST, closeButton, 270,
SpringLayout.WEST, panel);
closeButton.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent e) {
System.exit(0);
}
});
closeButton.setText("Close"); Oval = new JRadioButton();
panel.add(Oval);
Oval.setSelected(true);
Oval.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent e) {
applyShape();
}
});
buttonGroup.add(Oval);
Oval.setText("Oval"); Oval.setEnabled(isShapingSupported); roundedRectangle = new JRadioButton();
panel.add(roundedRectangle);
springLayout_1.putConstraint(SpringLayout.NORTH, roundedRectangle, 170,
SpringLayout.NORTH, panel);
springLayout_1.putConstraint(SpringLayout.WEST, roundedRectangle, 180,
SpringLayout.WEST, panel);
springLayout_1.putConstraint(SpringLayout.EAST, Oval, 230,
SpringLayout.WEST, panel);
springLayout_1.putConstraint(SpringLayout.WEST, Oval, 0,
SpringLayout.WEST, roundedRectangle);
roundedRectangle.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent e) {
applyShape();
}
});
buttonGroup.add(roundedRectangle);
roundedRectangle.setText("Rounded rectangle ");
roundedRectangle.setEnabled(isShapingSupported); final JSlider slider = new JSlider();
slider.setPaintLabels(true);
panel.add(slider);
springLayout_1.putConstraint(SpringLayout.SOUTH, closeButton, 28,
SpringLayout.SOUTH, slider);
springLayout_1.putConstraint(SpringLayout.NORTH, closeButton, 0,
SpringLayout.SOUTH, slider);
springLayout_1.putConstraint(SpringLayout.EAST, slider, 345,
SpringLayout.WEST, panel);
springLayout_1.putConstraint(SpringLayout.SOUTH, slider, 227,
SpringLayout.NORTH, panel);
springLayout_1.putConstraint(SpringLayout.NORTH, slider, 200,
SpringLayout.NORTH, panel);
slider.setValue(85);
slider.addChangeListener(new ChangeListener() {
public void stateChanged(final ChangeEvent e) {
applyOpacity(((JSlider) e.getSource()).getValue());
}
});
slider.setMinimum(5); paintGradiCheckBox = new JCheckBox();
paintGradiCheckBox.setSelected(true);
panel.add(paintGradiCheckBox);
springLayout_1.putConstraint(SpringLayout.SOUTH, Oval, 26,
SpringLayout.SOUTH, paintGradiCheckBox);
springLayout_1.putConstraint(SpringLayout.NORTH, Oval, 0,
SpringLayout.SOUTH, paintGradiCheckBox);
springLayout_1.putConstraint(SpringLayout.SOUTH, paintGradiCheckBox,
145, SpringLayout.NORTH, panel);
springLayout_1.putConstraint(SpringLayout.EAST, paintGradiCheckBox,
285, SpringLayout.WEST, panel);
springLayout_1.putConstraint(SpringLayout.WEST, paintGradiCheckBox, 0,
SpringLayout.WEST, Oval);
paintGradiCheckBox.setText("Paint gradient");
paintGradiCheckBox.setEnabled(isTranslucencySupported); center();
} private synchronized void applyOpacity(int value) {
if (!isOpacityControlSupported) {
return;
}
panel.updateUI();
AWTUtilities.setWindowOpacity(frame, ((float) value) / 100.0f); } private synchronized void applyShape() {
if (!isShapingSupported) {
return;
}
if (shapeListener != null) {
shapeListener.componentResized(null);
return;
}
panel.updateUI();
final TranslucentWindow fd = frame;
fd.addComponentListener(shapeListener = new ComponentAdapter() {
// @Override
public void componentResized(ComponentEvent evt) {
Shape shape = null; if (roundedRectangle.isSelected()) {
shape = new RoundRectangle2D.Float(0, 0, fd.getWidth(), fd
.getHeight(), 100, 100); } else if (Oval.isSelected()) {
shape = new Ellipse2D.Float(0, 0, fd.getWidth(), fd
.getHeight());
}
AWTUtilities.setWindowShape(fd, shape);
}
}); } public void center() {
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
frame.setLocation((d.width - frame.getWidth()) / 2, (d.height - frame
.getHeight()) / 2);
} public static void main(String args[]) {
new TranslucentWindow().setVisible(true);
}
}求详解 有些看不来
import com.sun.awt.AWTUtilities;
TranslucentWindow.java:32: 警告:com.sun.awt.AWTUtilities 是 Sun 的专用 API,可能会在未来版本中删除
import com.sun.awt.AWTUtilities;
^
TranslucentWindow.java:59: 警告:com.sun.awt.AWTUtilities 是 Sun 的专用 API,可能会在未来版本中删除
isShapingSupported = AWTUtilities.isTranslucencySupported(AWTUtilities.Translucency.PERPIXEL_TRANSPARENT);
^
TranslucentWindow.java:59: 警告:com.sun.awt.AWTUtilities 是 Sun 的专用 API,可能会在未来版本中删除
isShapingSupported = AWTUtilities.isTranslucencySupported(AWTUtilities.Translucency.PERPIXEL_TRANSPARENT);
^
TranslucentWindow.java:60: 警告:com.sun.awt.AWTUtilities 是 Sun 的专用 API,可能会在未来版本中删除
isOpacityControlSupported = AWTUtilities.isTranslucencySupported(AWTUtilities.Translucency.TRANSLUCENT);
^
TranslucentWindow.java:60: 警告:com.sun.awt.AWTUtilities 是 Sun 的专用 API,可能会在未来版本中删除
isOpacityControlSupported = AWTUtilities.isTranslucencySupported(AWTUtilities.Translucency.TRANSLUCENT);
^
TranslucentWindow.java:61: 警告:com.sun.awt.AWTUtilities 是 Sun 的专用 API,可能会在未来版本中删除
isTranslucencySupported = AWTUtilities.isTranslucencySupported(AWTUtilities.Translucency.PERPIXEL_TRANSLUCENT);
^
TranslucentWindow.java:61: 警告:com.sun.awt.AWTUtilities 是 Sun 的专用 API,可能会在未来版本中删除
isTranslucencySupported = AWTUtilities.isTranslucencySupported(AWTUtilities.Translucency.PERPIXEL_TRANSLUCENT);
^
TranslucentWindow.java:63: 警告:com.sun.awt.AWTUtilities 是 Sun 的专用 API,可能会在未来版本中删除
if(AWTUtilities.isTranslucencyCapable(translucencyCapableGC)){
^
TranslucentWindow.java:72: 警告:com.sun.awt.AWTUtilities 是 Sun 的专用 API,可能会在未来版本中删除
if (AWTUtilities.isTranslucencyCapable(configs[j])) {
^
TranslucentWindow.java:181: 警告:com.sun.awt.AWTUtilities 是 Sun 的专用 API,可能会在未来版本中删除
AWTUtilities.setWindowOpacity(frame, ((float) value) / 100.0f);
^
TranslucentWindow.java:205: 警告:com.sun.awt.AWTUtilities 是 Sun 的专用 API,可能会在未来版本中删除
AWTUtilities.setWindowShape(fd, shape);
^
11 警告输出完成 (耗时 1 秒)