JButtons 悬停时重叠组件

JButtons Overlap Components When Hovered On

我已经设置了一个位于 JButton 顶部(Z 轴)的 JPanel。将鼠标悬停在此 JPanel 上时,如果 JButton 也悬停在其上,则 JButton 会自动重新绘制在所有组件之上。这对于我的程序正常工作是不可取的。关于为什么会发生这种情况以及如何解决此问题的任何想法?感谢您提供的任何帮助!

这是我的代码的快速简单复制:

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);

JPanel panel = new JPanel();
panel.setBackground(new Color(0, 0, 102));
panel.setBounds(0, 0, 169, 261);
contentPane.add(panel);
panel.setVisible(false);

JButton btnNewButton = new JButton("New button");
btnNewButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent arg0) {
        panel.setVisible(!panel.isVisible());
    }
});
btnNewButton.setBounds(68, 70, 130, 70);
contentPane.add(btnNewButton);

JPanel 从顶部(Z 轴)开始,直到悬停 JButton(即使 JButton 被 JPanel 覆盖)。我希望这些信息足以满足您的要求。

在 Swing UI 中,几乎总是使用布局管理器。请参阅此以了解如何使用布局管理器: https://docs.oracle.com/javase/tutorial/uiswing/layout/layoutlist.html

因此,在您的代码中删除这些行:

contentPane.setLayout(null);
panel.setBounds(0, 0, 169, 261);
btnNewButton.setBounds(68, 70, 130, 70);

然后做类似的事情:

contentPane.setLayout(new BorderLayout());
contentPane.add(panel, BorderLayout.CENTER);
contentPane.add(btnNewButton, BorderLayout.SOUTH);