我们可以通过使用中定义的枚举来检查是否支持透明窗口WindowTranslucency。
并非所有平台都支持所有三种半透明形式。
以下代码显示了如何检查平台上的半透明支持。
import static java.awt.GraphicsDevice.WindowTranslucency.PERPIXEL_TRANSLUCENT; import static java.awt.GraphicsDevice.WindowTranslucency.PERPIXEL_TRANSPARENT; import static java.awt.GraphicsDevice.WindowTranslucency.TRANSLUCENT; //from w w w . ja v a 2s .c o m import java.awt.GraphicsDevice; import java.awt.GraphicsEnvironment; public class Main { public static void main(String[] args) { GraphicsEnvironment graphicsEnv = GraphicsEnvironment .getLocalGraphicsEnvironment(); GraphicsDevice graphicsDevice = graphicsEnv.getDefaultScreenDevice(); boolean isSupported = graphicsDevice .isWindowTranslucencySupported(PERPIXEL_TRANSPARENT); System.out.println("PERPIXEL_TRANSPARENT supported: " + isSupported); isSupported = graphicsDevice.isWindowTranslucencySupported(TRANSLUCENT); System.out.println("TRANSLUCENT supported: " + isSupported); isSupported = graphicsDevice .isWindowTranslucencySupported(PERPIXEL_TRANSLUCENT); System.out.println("PERPIXEL_TRANSLUCENT supported: " + isSupported); } }
上面的代码生成以下结果。
以下代码显示如何创建一个透明窗口。
import java.awt.BorderLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.SwingUtilities; public class Main extends JFrame { public Main() { super(); JButton closeButton = new JButton("Close"); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.setUndecorated(true); this.setOpacity(0.80f); this.setSize(200, 200); // Center it on the screen this.setLocationRelativeTo(null); this.add(closeButton, BorderLayout.SOUTH); closeButton.addActionListener(e -> System.exit(0)); } public static void main(String[] args) { SwingUtilities.invokeLater(() -> { Main frame = new Main(); frame.setVisible(true); }); } }
以下代码使用JPanel创建从左边缘的不透明到在右边缘逐渐变透明的渐变效果。
import java.awt.Color; import java.awt.GradientPaint; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.GridLayout; import java.awt.Paint; // w w w. j ava 2 s.com import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.SwingUtilities; public class Main extends JFrame { public Main() { this.setDefaultCloseOperation(EXIT_ON_CLOSE); // Make sure the frame is undecorated this.setUndecorated(true); this.setBackground(new Color(0, 0, 0, 0)); this.setSize(200, 200); // Center it on the screen this.setLocationRelativeTo(null); this.getContentPane().setLayout(new GridLayout(0, 1)); this.add(new TranslucentJPanel(Color.RED)); JButton closeButton = new JButton("Close"); this.add(closeButton); closeButton.addActionListener(e -> System.exit(0)); } public static void main(String[] args) { SwingUtilities.invokeLater(() -> { Main frame = new Main(); frame.setVisible(true); }); } } class TranslucentJPanel extends JPanel { private int red = 240; private int green = 240; private int blue = 240; public TranslucentJPanel(Color bgColor) { this.red = bgColor.getRed(); this.green = bgColor.getGreen(); this.blue = bgColor.getBlue(); } @Override protected void paintComponent(Graphics g) { int width = this.getWidth(); int height = this.getHeight(); float startPointX = 0.0f; float startPointY = 0.0f; float endPointX = width; float endPointY = 0.0f; Color startColor = new Color(red, green, blue, 255); Color endColor = new Color(red, green, blue, 0); Paint paint = new GradientPaint(startPointX, startPointY, startColor, endPointX, endPointY, endColor); Graphics2D g2D = (Graphics2D) g; g2D.setPaint(paint); g2D.fillRect(0, 0, width, height); } }
我们可以使用Swing通过使用Window类的setShape(Shape s)方法创建一个自定义形状的窗口。
使用成形窗口必须满足以下三个条件:
import java.awt.BorderLayout; import java.awt.geom.Ellipse2D; import java.awt.geom.Path2D; import java.awt.geom.Rectangle2D; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.SwingUtilities; public class Main extends JFrame { public Main() { this.setUndecorated(true); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.setSize(200, 200); Ellipse2D.Double ellipse = new Ellipse2D.Double(0, 0, 200, 100); Rectangle2D.Double rect = new Rectangle2D.Double(0, 100, 200, 200); Path2D path = new Path2D.Double(); path.append(rect, true); path.append(ellipse, true); this.setShape(path); JButton closeButton = new JButton("Close"); this.add(closeButton, BorderLayout.SOUTH); closeButton.addActionListener(e -> System.exit(0)); } public static void main(String[] args) { SwingUtilities.invokeLater(() -> { Main frame = new Main(); frame.setLocationRelativeTo(null); frame.setVisible(true); }); } }
MyBatis-Plus 条件构造器-AbstractWrapperand(ConsumerParam consumer)and(boolean condition, ConsumerParam consumer)AND嵌套...
Spring教程 -Spring Bean范围当在Spring xml配置中定义Java bean或使用Spring注释时,我们可以将Java bean标记为 singleton 或原...
Spring教程 -Spring Bean继承Spring支持bean配置继承。我们可以定义一个bean,然后进一步配置它来创建新的bean。通过使用bean继...
fmt:message 标签 fmt:message标签映射一个关键字给局部消息,然后执行参数替换。语法格式fmt:message key=string bundle=string...