java - 将 JPanel 上的组件置于前面 (Java)

标签 java swing focus actionlistener

在 VB 中,您可以使用 zOrder。 在 .Net 中,它是 .SetChildIndex

在你问之前,不,在这种情况下我没有使用布局管理器。如果两个组件彼此重叠,如何在它们显示后更改顺序?

由于空间不足,我有一个按钮与另一个组件(标签)的顶部略有重叠。我在按钮 之前将 JLabel 添加到表单中,当表单加载时,它看起来很好。但是,当用户单击该按钮时,JLabel 会退到后面,使它的一部分消失。有没有办法让它保持在前面?我试过将 label.grabFocus() 放在按钮的 ActionListener 中,但它不起作用。

最佳答案

默认情况下,Swing 假定组件不重叠,因此可以更有效地重绘组件。也就是说,当您更改组件的属性时,只有该组件需要重新绘制。

当组件在面板上重叠时,您需要告诉面板,这样它才能确保所有组件都按照正确的 ZOrder 重新绘制:

您可以通过覆盖 JPanel 的 isOptimizedDrawingEnabled() 方法以返回 false 来实现这一点。

JPanel panel = new JPanel()
{
    @Override
    public boolean isOptimizedDrawingEnabled()
    {
        return false;
    }
}

关于java - 将 JPanel 上的组件置于前面 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7010453/

相关文章:

java - 使用 SHA-512 算法创建新行字符

java - 当使用 json 进行实体解析时,hibernate 部分更新

java - 在获得焦点时打开 JXDatePicker

java - 为什么我们的 Java 应用程序不在辅助监视器上显示窗口?

c# - 如何了解哪个控件已被关注?

HTML5 : How to set focus on a text input in a list with AngularJS

java - 我可以在Java中更改循环内的变量名称吗

Java FileNotFoundException 尽管文件存在。

java - 如何让 JLabels 从下一行开始

wpf - 将焦点设置在 WPF ComboBox 上并不总是有效