问题标签 [glasspane]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 单个面板的 Java Swing GlassPane 功能?
我已经构建了一个简单的界面来填充我的整个 JFrame。我正在使用在互联网上发现的 FinalGlassPane 类的一个版本。
此玻璃窗格没有常规事件侦听器,但它监视其底层组件的 AWTEvent。这样就有了界面的全部功能,我可以使用单个 AWTEvent 处理程序响应全局鼠标移动坐标,并相应地在所有内容上进行绘制。一切都很好,但现在我需要这个功能的副本,每个都有自己的坐标空间和事件处理程序,在主 JFrame 内。我刚刚了解了 JLayeredPane,但想确保使用它可以实现此功能。IE 在顶部添加了一个完全透明但可绘制的 JPanel 层,用它处理 AWTEvents,并且仍然可以正常触发底层事件。
编辑:我正在阅读有关在 JDesktopPane 内使用多个 JInternalFrame(和相关的玻璃窗格)的信息。我不认为 JDesktopPane 与布局管理器一起使用,所以我必须在需要时绝对定位/调整 2 帧的大小,但这可能是最好的选择。结束编辑
我要做的最后一件事是为每个界面组件添加鼠标移动侦听器,并且必须转换为父面板坐标才能运行相同的方法。
如果必须,我可以继续监视整个玻璃窗格鼠标坐标,并找出如何从那里分支逻辑。不过,自给自足和个性化会更好。
最后一个警告,我想最终把它带到 Android 上,但对 Android 图形一无所知。如果没有分层面板功能,我几乎宁愿先用更难、更便携的方式实现它。
java - 将 JLayeredPane 引入现有的 JFrame
我一直在盯着 Oracle 的 JLayeredPane 教程,但它们的布局方式让我感到困惑,并且没有理解我想要做什么。
我有一个应用程序,到目前为止还没有层的概念。一切都布置在一个单层中,在一个 JFrame 内。
我现在想介绍一个零星出现的组件,根据需要,在某个位置,覆盖正常停留在那里的现有组件。我是否必须修改我现有的应用程序 JFrame,以便将其所有顶级内容(即直接添加到 JFrame 的组件)添加到 JFrame 的 JLayeredPane 中?
或者,究竟是什么?
我正在寻找一种简单的方法来调整此 gui 以使用现有 GUI 的最少返工的层。
在此先感谢您的任何帮助。
java - Java Swing - 闪烁的图标不显示
我正在尝试使用 GlassPane 将图标闪烁给用户。我正在运行一个javax.swing.Timer
基本上执行此操作的:
不幸的是,如果我让 EDT(计时器内的当前线程)休眠,则图标不会显示,因为该paintComponent
方法在线程进入休眠状态之前无法完全调用。因此,当下一条指令启动时,玻璃窗格被隐藏,因此图标永远不会显示。有没有办法使用这种(类似的)方法来实现我想要的?
java - Java中使用GlassPane的内部透明选择窗口
我正在努力实现以下目标
http://www.qksnap.com/i/3hunq/4ld0v/screenshot.png
我目前能够使用以下代码在半透明玻璃窗格背景上成功绘制矩形:
效果很好,但是,我希望矩形内的区域完全透明,而外部仍然很暗,就像上面的屏幕截图一样。
有任何想法吗?
java - Swing:GlassPane 防止鼠标指针改变
我有一个带有一些标签的 JTabbedPane,标签旁边还有很多未使用的额外空间。所以我正在尝试使用它并在那里放置一些按钮(比如在 Eclipse 中)。我将按钮放在 GlassPane 上:
这行得通,我仍然可以点击我的 gui 的其他元素(我发现的大多数搜索结果都是关于如何防止这种情况的)。到目前为止,唯一的问题是当鼠标指针悬停在 JSplitPane 的栏上时,鼠标指针不会变为双端水平箭头。我怎样才能恢复这种行为?
编辑
我发现没有显示来自玻璃窗格下任何组件的鼠标更改事件。这些组件会将鼠标光标更改为手形光标、变焦镜头等。这些鼠标指针更改都不再起作用。我想这是因为使用玻璃窗格,需要对玻璃窗格进行鼠标指针更改,但我不想手动更改所有鼠标指针。
java - 具有透明层的 JLayeredPane 导致绘制不正确
我有一个有两层的 JLayeredPane。顶层是完全透明的,作为一个玻璃窗格,它捕获鼠标事件,然后将它们分派到它下面的窗格中。由于未知原因,底层无法正确绘制。我是否必须向它发送绘画事件或其他什么?
顺便说一句,我会使用 Frame 的玻璃窗格,但我无法做到。我被困在使用建立在 Swing 之上的 GUI 框架提供的 JPanel 上。我尝试使用 SwingUtilities 来获取父框架,但它总是返回 null。
web-services - 在 LWUIT 中形成玻璃窗格
我正在尝试使用 LWUIT 中的 Form Glass Pane 制作等待屏幕,以下是我正在使用的代码
和
从我的表格中
我真正想做的是在加载数据时打开玻璃盘并在完成时将其隐藏,但是发生了什么发送请求并在得到响应后显示玻璃板,我试图把我的玻璃不同线程中的窗格独立于主线程运行,它也不起作用。
java - 在进入循环之前显示 GlassPane
(在我使用 Swing GUI 的应用程序中)我想在单击 JButton 后调用的循环或方法中执行的某些工作期间显示 GlassPane。
例如:(单击按钮后执行的操作)
运行此代码会导致在执行 someTimeConsumingMethod() 期间不显示 glassPane - GUI 会在显示结果之前冻结片刻。删除该循环中的最后一行 (glassPane.setVisible(false);) 会导致在方法完成后显示 glassPane(当 GUI 解冻时)。
有没有一种简单的方法可以在 GUI 冻结之前显示 glassPane,或者我需要在这里使用一些高级知识?(线程?)
更新1:
我已经根据davidXYZ答案更新了我的代码(有两个更改):
(单击按钮后执行的操作)
第一个更改的要点是,在我的 GUI 线程中运行 someTimeConsumingMethod 之前,在新线程中设置 glassPane 可见在 someTimeConsumingMethod 完成后会显示 glassPane(仔细检查)。
现在它工作正常,谢谢你的所有答案。我一定会检查您提供的所有链接以真正理解线程!
UPDATE2: 更多信息:someTimeConsumingMethod(); 在我的应用程序中,正在根据 XML 数据准备新的 Swing 组件(从 JButtons 和 JLabels 构建的卡片,在需要的地方很少有 JPanel,并将它们添加到正确的位置)。
UPDATE3:
我正在尝试使用 SwingWorker 的 invokeLater 方法使其工作。现在看起来像这样:
(单击按钮后执行的操作)
它的效果不如UPDATE1中的代码好(但仍然有效)。问题是:
glassPane 加载时没有 .gif 动画(文件在自定义 glassPane 类中设置 - 它适用于UPDATE1代码)
“工作”过程结束时有一点延迟 - 第一个光标变为正常(来自 WAIT_CURSOR),并且在很短的时间后 glassPane 消失。光标在激活/停用时由自定义 glassPane 类更改(使用新线程方式无延迟)。
使用 SwingWorker 的 invokeLater 方法是否正确?
编辑:我的错误,我将 SwingWorker 与 SwingUtilities.invokeLater() 混淆了。我猜图像问题是由于 someTimeCONsumingMethod 启动时 GUI 冻结所致。
java - java应用程序的安全桌面模式效果
现在有没有人如何实现“安全桌面模式”(效果),例如从 Windows Vista/7 UAC 同意块中获得的?
我认为这是一些功能,它会在这里和那里删除像素(并可能使它们变灰),然后最终将其绘制到屏幕上。我想将它应用到我的应用程序中,以防止用户做任何事情,直到另一个用户连接到系统(但这不是重点)。
我非常感谢您的建议。
亲切的问候,
A。
编辑:我真的只是在寻找这个
延迟输入我可以做得很好。
谢谢大家。
java - 如何通过带有 MouseListener 的 JGlassPane 点击到它后面的 UI
我有一个JFrame
和一堆JComponents
在上面JFrame
。我需要使用JGlassPane
并且我使用这个实现来设置它。
JButtons
这样做后,我无法JComponents
在JGlassPane
.
有没有一种方法可以只选择组件上的组件,GlassPane
同时仍然能够选择组件下的组件GlassPane
?
编辑我忘了提到(不知道这是否相关)我确实将 aMouseListener
和 a都附加MouseMotionListener
到了玻璃窗格上。有没有办法将鼠标事件传递给其他组件并仅在需要时使用它们?