- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我里面有一个 JFrame 和一个 JPanel 层次结构,我想实现一个内部面板,我可以让它看起来“禁用”(而其他面板不会改变),也就是说,用半透明的灰色层覆盖它并拦截所有发送到此面板的鼠标甚至键盘事件。我一直在寻找解决方案,但还没有真正找到好的解决方案。
我最接近的解决方案是在我使用 JRootPane 时,每当我想禁用它时,我都会使它的玻璃面板可见。玻璃板已设置为不透明且背景为半透明。
我尝试的一个简单例子:
public class Test extends JFrame {
private final JPanel jPanel;
public Test() {
jPanel = new JPanel();
final JButton jButton = new JButton("Hidden");
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("hidden is clicked!");
}
});
final JRootPane jRootPane = new JRootPane();
jPanel.add(jRootPane);
final JPanel glassPane = new JPanel();
final JButton jButton2 = new JButton();
jButton2.addActionListener(new ActionListener() {
private boolean visible = true;
@Override
public void actionPerformed(ActionEvent e) {
glassPane.setVisible(visible = !visible);
}
});
jPanel.add(jButton2);
jRootPane.getContentPane().add(new JScrollPane(jButton));
glassPane.setBackground(new Color(0.5f, 0.5f, 0.5f, 0.2f));
glassPane.setOpaque(true);
jRootPane.setGlassPane(glassPane);
glassPane.setVisible(true);
getContentPane().add(jPanel);
}
public static void main(String[] strings) {
final Test test = new Test();
test.pack();
test.setVisible(true);
}
}
但问题是,即使玻璃在内容顶部可见,它也不会像记录的那样拦截到达内容的事件 here .
最佳答案
在您的测试类中,您的 glasspane 不会拦截事件,因为您没有告诉它拦截事件(拦截事件不是默认行为)。
在文档中link , 它说
The glass pane
The glass pane is useful when you want to be able to catch events or paint over an area that already contains one or more components. For example, you can deactivate mouse events for a multi-component region by having the glass pane intercept the events. Or you can display an image over multiple components using the glass pane.
您可以这样拦截鼠标事件:
glassPane.addMouseListener(new MouseAdapter()
{
@Override
public void mouseClicked(MouseEvent e)
{
e.consume();
}
@Override
public void mousePressed(MouseEvent e)
{
e.consume();
}
});
您可以通过这种方式拦截键盘事件:
glassPane.setFocusable(true);
glassPane.addKeyListener(new KeyListener()
{
@Override
public void keyTyped(KeyEvent e)
{
e.consume();
}
@Override
public void keyReleased(KeyEvent e)
{
e.consume();
}
@Override
public void keyPressed(KeyEvent e)
{
e.consume();
}
});
注意:JPanel 必须是可聚焦的才能拦截键盘事件。
关于java - JRootpane - 将玻璃 Pane 设置为可见不会拦截鼠标事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26714155/
大家好,我是 android/glass 开发的新手,所以如果我错了请纠正我。 我尝试创建一个很好的高频实时卡片。然而,当我关闭应用程序时,函数 surfaceDestroyed() 没有得到触发并且
我正在编写一些 C# 代码,我想在其中获取一个 2D 矩形并将其拆分为更小的 2D 多边形。我希望效果看起来像矩形是由玻璃制成的,并且在随机位置用锤子敲击它。我想知道是否有人知道一个好的算法来帮助我解
我有一个无边框、不可调整大小的 WPF 窗体(WindowStyle=None、AllowsTransparency=True、ResizeMode=NoResize),背景是半透明的。下面是在记事本
我想在使用 OpenGL(带着色器)的屏幕转换中做类似的事情。我一直在寻找一些教程或类似的东西,但没有任何效果。我怎样才能达到这种效果? 最佳答案 只是关于如何开始的一些想法.. 如果您确实从 3D
我在对半透明叠加 div 应用模糊效果时遇到问题。我希望 div 后面的所有内容都变得模糊,像这样: 这是一个不起作用的 jsfiddle:http://jsfiddle.net/u2y2091z/
我(终于!)找到了一种在玻璃上呈现 Windows.Forms 控件的方法,它似乎没有任何重大缺点,也没有任何大的实现时间。它的灵感来自 this article来自 Coded,它基本上解释了如何
基本上 在一个 Activity 中,我有一个 ListView。当我选择一个项目时,一个透明的 Activity 会以一个小框的形式打开。当此框出现时,您仍然可以查看之前的 Activity 屏幕,
我有许多在过去编写的实用程序,看起来非常过时。所以我最近开始让他们使用 Windows 主题,并希望加入一些 Aero 玻璃效果。 问题是,我不太确定合适的用途是什么。 IE7 和现在的 Firefo
我能否以某种方式禁用我的 WPF 应用程序窗口的玻璃/透明度? 注意:我不想禁用 Aero,只是禁用玻璃/透明度和我的窗口,而不是整个系统。 类似这样的东西(Enable Transparency 复
对于 Google Glass 应用程序,如何让您的应用程序在向下滑动到主玻璃菜单时优雅地退出? 在 MainActivity 中尝试这段代码: @Override protected
我有一个发布一对实时卡片的 Google Glass 应用程序。当我单击这些卡片时,它会将我带到 Activity 的 UI。我想做的是拦截其中一张卡片的点击,而不是将 View 更改为 Activi
有人知道,Google Glass 会支持 OpenGL ES 吗?如果是这样,它会是1.1吗? 2? WebGL? 我确信这可能必须在 GDK (GNDK?) 发布时使用,但有计划使其成为可能吗?
我有一个以 CardScrollView 作为 Activity 的应用程序。 Ok Glass => My App => Ok Glass => Next Page
我在 JFrame 玻璃 Pane 顶部放置了一个 JFilechooser。当我选择“查找”弹出窗口时,它似乎显示在 JFilechooser 后面。我不久前用网上找到的一个解决方案修复了这个问题,
我有一个简单的 Glass 应用程序,它使用 GDK 抓取一些文本并拍照。我可以轻松创建带有文本和照片的 LiveCard,但是当我尝试将实时卡片转换为静态卡片时,当我尝试将图像添加到卡片时出现空指针
我是一名优秀的程序员,十分优秀!