nat*_*han 5 java swing transparent jpopupmenu jpopup
我想自定义外观,JPopupMenu所以我在i上创建了一个自定义类,扩展了JPopupMenu类,覆盖了paintComponent方法,就像我需要自定义的任何组件一样.
public class CustomPopupMenu extends JPopupMenu {
@Override
public paintComponent(Graphics g) {
//custom draw
}
}
Run Code Online (Sandbox Code Playgroud)
我知道的唯一问题是我无法JPopupMenu透明化.我setOpaque(false)觉得够了,我错了.
我怎样才能JPopupMenu透明?
弹出菜单的问题在于,它可能被实现为顶级容器(窗口),而窗口是不透明的,无论您使用 setOpaque() 设置什么值,它都是不透明的。但窗户也可以做成半透明的。
您可以通过强制使用重量级弹出窗口并粗暴地改变其不透明度来破解它。尝试将此作为实验的起始基础(Java7):
import java.awt.Window;
import javax.swing.JPopupMenu;
import javax.swing.SwingUtilities;
public class TranslucentPopup extends JPopupMenu {
{
// need to disable that to work
setLightWeightPopupEnabled(false);
}
@Override
public void setVisible(boolean visible) {
if (visible == isVisible())
return;
super.setVisible(visible);
if (visible) {
// attempt to set tranparency
try {
Window w = SwingUtilities.getWindowAncestor(this);
w.setOpacity(0.667F);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,它不会使子菜单变得半透明!