【发布时间】:2017-09-18 03:04:07
【问题描述】:
我正在尝试制作重叠面板,但“最顶层”面板下方的小部件会以某种方式对鼠标事件做出反应并重新绘制事件并在顶层上方呈现。例如,这里我的底层有很多按钮和标签,顶层有向上/向下按钮,对于这个测试来说是完全不透明的(灰色背景):
这使用OverlayLayout 管理器将面板放置在不同的 Z 水平上。将鼠标悬停在按钮上时会弹出视图,而右侧的自动更新标签也会弹出视图。
SSCCE:
public class Temp extends JPanel {
public static void main(String... args) {
SwingUtilities.invokeLater(() -> {
JFrame f = new JFrame();
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f.setContentPane(new Temp());
f.setSize(500, 250);
f.setLocationRelativeTo(null);
f.setVisible(true);
});
}
public Temp() {
super(null);
setLayout(new OverlayLayout(this));
JButton bottom = new JButton("Bottom");
JButton top = new JButton("Top");
bottom.setBounds(100, 50, 200, 100);
top.setBounds(200, 100, 200, 100);
// OverlayLayout adds components from top to bottom.
add(new JPanel(null) {{
setBackground(new Color(175, 150, 125));
add(top);
}});
add(new JPanel(null) {{
add(bottom);
}});
}
}
这基本上是我现在的做法。在鼠标悬停一点之后看起来像这样,但是通过悬停我可以将两个按钮中的任何一个放在另一个之上:
我的问题是,我怎样才能以最简单的方式解决这个问题,或者处理这个问题的标准方法是什么?也许是非模态无框架 JDialog?我反对该对话框的一个论点是,我不想让用户使用键盘快捷键在屏幕上移动它。
【问题讨论】:
-
好的,可以了;只是一个没有布局管理器的小皮塔饼,它允许鼠标事件通过。将空鼠标适配器添加到顶部面板感觉就像是一种 hack。
-
它只是一个容器,你可以根据需要应用一个布局管理器。我不确定你的第二条评论是什么意思,这就是所有容器的工作