在stackoverflow中搜索这个问题的答案只会让我提出其他问题,询问如何在一个或另一个上实现透明度,没有一个问题出现透明度问题,而另一个问题则不然。 我相信你现在已经能够弄清楚这个问题,但我会更深入地解释一下......我和朋友正在研究一个java应用程序并在运行时启动了一个启动器。他使用了一个mac,然后JFrame变得透明,但是当我将项目同步到我的计算机时;一台Windows PC,JFrame的背景可见,顶部的图形闪烁,有点像闪光灯。
如果有人能够提供任何形式的见解,我们将不胜感激,如果需要提供更多信息,我会尝试更深入地完成计划,并获得更多信息。
private void setUpWindow(int width, int height) {
setIconImage(images.get(1));
setSize(width, height);
setUndecorated(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBackground(new Color(0,255,0,0));
setLayout(new BorderLayout());
addMouseListener(this);
setResizable(false);
setLocationRelativeTo(null);
addComponents();
requestFocus();
setVisible(true);
}
private void addComponents() {
setContentPane(new BackPanel());
getContentPane().setBackground(Color.BLACK);
setLayout(new BorderLayout());
panel.setSize(screenSize);
add(panel);
}
窗口大小为1000x600
public class BackPanel extends JPanel {
public BackPanel() {
setOpaque(false);
setVisible(true);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D overGraphics2D = (Graphics2D)g.create();
overGraphics2D.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.0f));
overGraphics2D.setColor(Color.BLACK);
overGraphics2D.fill(getBounds());
overGraphics2D.dispose();
}
}
public class DrawingPanel extends JPanel
{
public DrawingPanel()
{
setVisible(true);
}
@Override
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
refreshTimer.schedule(new refreshTimer(), 1);
}
}
引用的刷新计时器的延迟为“1”,以便在绘制启动器时启动它。
此外,这个想法; how to set JFrame background transparent but JPanel or JLabel Background opaque?用于设置透明度。
答案 0 :(得分:0)
引用的刷新计时器的延迟为“1”,以便在绘制启动器时启动它。
这是跨平台绘图的问题,因为不同的操作系统具有不同的“分辨率”。您需要绘制/调用方法以在paintComponent()
方法内绘制。您还需要通过获取屏幕大小然后将窗口设置为全屏来使窗口全屏(或者有点全屏)。像这样:
//in the constructor after declaring the frame undecorated
setSize(Toolkit.getDefaultToolkit().getScreenSize());
希望有所帮助!