JButtons перекрывают компоненты при наведении - PullRequest
0 голосов
/ 02 января 2019

Я установил JPanel, который находится сверху (ось Z) кнопки JButton.При наведении курсора на этот 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).Я надеюсь, что этой информации достаточно для ваших требований.

1 Ответ

0 голосов
/ 02 января 2019

В пользовательском интерфейсе Swing почти всегда используются менеджеры макетов.Смотрите это, чтобы узнать, как использовать менеджеры компоновки: 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);
...