我在带有 Mac OS X 的 Java 6 下使用透明(形状)JFrame。
我的系统告诉我支持 Translucency.PERPIXEL_TRANSLUCENT。虽然我的系统告诉我不支持 Translucency.PERPIXEL_TRANSPARENT,但我发现它在 Mac OS X 下放置 alpha=0 的像素时可以工作。
现在,当在 JTextField 中选择文本时,它也会拖动窗口,就好像我将拖动底层内容窗格一样。
这是我要尝试的示例代码(包含在您的计算机上运行的主要方法)
import com.sun.awt.AWTUtilities;
import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Paint;
import java.awt.Shape;
import java.awt.geom.Ellipse2D;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class DialogTest extends JFrame {
public DialogTest() {
setBackground(new Color(0, 0, 0, 0));
JPanel p1 = new JPanel() {
public void paintComponent(Graphics g1) {
if (g1 instanceof Graphics2D) {
Paint p =
new GradientPaint(0.0f, 0.0f, new Color(240,240,240, 0),
0.0f, getHeight(), new Color(240,240,240, 255), true);
Graphics2D g2d = (Graphics2D) g1;
g2d.setPaint(p);
Shape s = new Ellipse2D.Double(0,0,getWidth(),getHeight());
g2d.fill(s);
}
}
};
add(p1);
p1.setOpaque(false);
p1.add(new JButton("button 1"));
JTextField tf = new JTextField("Sample Text To Select");
p1.add(tf);
p1.add(new JButton("button 2"));
setUndecorated(true);
setSize(400,400);
AWTUtilities.setWindowOpaque(this, false);
}
public static void main(String[] s) {
// Create the GUI on the event-dispatching thread
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
DialogTest tw = new DialogTest();
// Display the window.
tw.setVisible(true);
}
});
}
}