java - JComboBox 下拉菜单不遵守 AlwaysOnTop

标签 java swing awt jcombobox always-on-top

我有一个总在最前面的窗口,我想将它保持在所有其他窗口之上。使用 setAlwaysOnTop(true) 似乎适用于大多数用途,但在涉及 JComboBox 下拉菜单时会失败。有什么办法可以防止这种情况发生吗?下面附上了一个 SSCCE 和不需要的功能的图片。

编辑:不确定该行为是否依赖于操作系统,但我注意到使用 Java 7 的 Windows 7 上的问题。此操作系统支持 top。

编辑 2:似乎 JPopupMenu 对 alwaysOnTop() 有一个覆盖以返回 true。这是问题的根源,因为顶层组件没有定义它们如何出现在彼此之上的顺序(取决于操作系统)。更糟糕的是,该方法是包私有(private)的。很有问题...

不良行为:

Undesired Behavior

中南合作:

import java.awt.BorderLayout;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JTextField;

public class OnTopTest
{
    public static void main( String[] args )
    {
        new OnTopTest();
    }

    public OnTopTest()
    {
        JDialog onTop = new OnTopWindow();
        JDialog other = new OtherWindow();

        System.out.println("IS ON TOP SUPPORTED? " + onTop.isAlwaysOnTopSupported());

        other.setVisible( true );
        onTop.setVisible( true );
    }


    private class OnTopWindow extends JDialog
    {
        public OnTopWindow()
        {
            setLayout( new BorderLayout() );

            JButton button = new JButton("Button");
            add( button, BorderLayout.CENTER );

            setSize( 100, 100 );

            setAlwaysOnTop( true );
        }
    }

    private class OtherWindow extends JDialog
    {
        public OtherWindow()
        {
            setLayout( new BorderLayout() );

            JTextField textField = new JTextField("Text");
            add( textField, BorderLayout.NORTH);

            JButton button = new JButton("Button");
            add( button, BorderLayout.CENTER );

            JComboBox comboBox = new JComboBox( new Object[] {"Item1", "Item2", "Item3"} );
            add( comboBox, BorderLayout.SOUTH );

            setSize( 200, 200 );
        }
    }
}

最佳答案

我很确定这是由操作系统处理的,Java 不能强制 dropdown 不与其他窗口重叠,因为搜索时没有指定 Java 在许多不同的语言中报告了相同的行为。

您可以使用 JMenu 进行测试以确认,但我相信它也会发生,因为菜单和其他一些控件(如下拉菜单)将(必要时)显示在任何其他窗口上方。

关于java - JComboBox 下拉菜单不遵守 AlwaysOnTop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28441015/

相关文章:

java - 在通用 Cplex 回调中访问分支切割节点 ID

java - 停止 SwingWorker 中 JProgressBar 的不确定模式

java - 如果不建议使用挥杆组件后退技巧?

java - 从行边距中选择行 - mouseDragged 事件跟不上选择处理

Java 卡布局。多张卡中的一个组件

java - 重构名称后出现 NoClassDefFoundError

java - 使用 Scanner 解析文件的输入。 java

java - 矩形未绘制在顶部

java - 绘制包含显示圆形图标的标签

java - Swing GUI 未更新