Déb*_*ora 2 java linux windows swing joptionpane
我在Windows OS上创建了一个swing应用程序.我的一个JDialog(其窗口是parentJFrame)显示了一个JOptionPane.
JOptionPane.showMessageDialog(parentJFrame, "I am a JOption");.
在运行时,parentJFrame setAlwaysOnTop(true).即使它已设置alwaysOnTop-TRUE,JOptionPane也会出现在Windows操作系统上的parentJFrame上.但是当我在Linux操作系统上运行时,JOptionPane显示在parentJFrame后面.(可能是因为parentJFrame alwyasOnTop是真的,但是JRE如何以不同的方式为不同的操作系统运行相同的应用程序?)我怎样才能得到它Linux中parentJFrame的顶部.?这很紧急.
当'alwaysOnTop-true'组件显示一个JOptionPane时,JOptionPane出现在Linux的组件后面.. :(.但是这在Windows操作系统中处理得很好.在组件的顶部显示了JOptionPane 'alwaysOnTop-true'.似乎在Linux操作系统的桌面屏幕上显示组件存在冲突.我不确定.但我猜它.
小智 5
您在Linux上看到的行为符合API规范.这就是它对Window.setAlwaysOnTop()的说法:
如果有多个始终在顶部的窗口,则它们的相对顺序未指定且与平台相关.
并且:
由永远在顶的窗口拥有的所有窗口都会继承此状态并自动变为始终在顶部.
这可以解释为什么位于JOptionPane核心的JDialog也具有"始终处于最佳"状态.似乎在Windows上偶然它按预期工作,但实际上你要求Swing做一些不可能的事情:向父母"始终高于其他窗口",以及在其上显示对话框.
这是一个可能的解决方法:将对话框放在父对象旁边,这样当它在z轴下面时,用户仍然会看到它:
JDialog dialog = new JOptionPane("Message").createDialog(parent, "Title");
Point dialogLoc = dialog.getLocation();
Point parentLoc = parent.getLocation();
dialog.setLocation(parentLoc.x + parent.getWidth(), dialogLoc.y);
dialog.setVisible(true);
Run Code Online (Sandbox Code Playgroud)
请注意,没有单一的"Linux操作系统",特别是在窗口管理方面 - 有很多不同的桌面环境和窗口管理器在窗口排序和可见性方面表现得非常不同,通常是故意的.
| 归档时间: |
|
| 查看次数: |
5784 次 |
| 最近记录: |