【发布时间】:2018-05-15 17:03:09
【问题描述】:
我有一个奇怪的问题。尝试使用 java swing 创建透明窗口适用于 Java 1.7,但在 Java 1.8 上失败。不幸的是,我无法弄清楚如何在那里解决它。 实际上 Graphics.clearRect() 适用于 1.7,而不适用于 1.8。 我尝试实现https://tips4java.wordpress.com/2009/05/31/backgrounds-with-transparency/,仍然没有成功。 这是娱乐的代码:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Testpanel
{
private JLabel Testlabel;
private JFrame Hintergrundfenster;
private Bewegungspanel meinBewegungspanel;
public class Bewegungspanel extends JPanel
{
@Override
protected void paintComponent(Graphics Grafik)
{
Grafik.clearRect(0,0,getWidth(), getHeight());
}
public Bewegungspanel()
{
addMouseListener(new MouseAdapter()
{
public void mouseEntered(MouseEvent Ereignis)
{
Testlabel.setText("Hi");
}
public void mouseExited(MouseEvent Ereignis)
{
Testlabel.setText("Bye");
}
});
}
}
public static void main(String args[])
{
Testpanel meinTestpanel = new Testpanel();
}
public Testpanel()
{
Testlabel = new JLabel("Hello")
/*{
@Override
protected void paintComponent(Graphics Grafik)
{
Grafik.clearRect(0,0,0,0);
}
}*/;
Hintergrundfenster = new JFrame();
Hintergrundfenster.setUndecorated(true);
Hintergrundfenster.setSize(100,100);
meinBewegungspanel = new Bewegungspanel();
meinBewegungspanel.setLayout(new GridLayout(2,2));
meinBewegungspanel.add(Testlabel);
meinBewegungspanel.setBackground(new Color(0,0,0,140));
Hintergrundfenster.setBackground(new Color(0,0,0,0));
Hintergrundfenster.add(meinBewegungspanel);
Hintergrundfenster.setVisible(true);
}
}
将鼠标悬停在标签上时,其文本会发生变化。新数据仅在 1.8 上绘制在旧数据之上,导致丑陋的伪像:
这是 1.8 版本的结果:
使用 java 1.7:
如果有任何解决问题的想法,我将不胜感激。提前致谢。
【问题讨论】:
-
旁注:根据 Java 代码约定字段,变量 和 参数应以小写字符开头(这是为了更容易区分类和变量),因此像
mouseEntered(MouseEvent Ereignis)或JLabel Testlabel这样的东西最终可能会导致混乱。 -
你的链接是 2009 年的,所以它不是为 java 8 制作的。它可能是一个改变行为的更新,你也不要在你的
Bewegungspanel.paintComponent中调用super.paintComponent -
我的代码实际上没有使用链接方法。我刚才提到它是为了指出我尝试了几种方法来解决这个问题。
-
费德里科。我试过了,但结果不是我想要的。
标签: java swing version paintcomponent