Java, установка границ для кнопки после нажатия портит другой JPanel - PullRequest
0 голосов
/ 10 января 2019

Как упомянуто в названии, у меня есть JButton, который при нажатии я хочу добавить к нему границу. Проблема в том, что когда я пытаюсь добавить эту границу, она полностью портит другую имеющуюся у меня JPanel и перемещает все в теме. Вот код для моей мышки:

b.addMouseListener(new MouseAdapter() {
            @Override
                public void mouseClicked(MouseEvent ev) {
                    if (ev.getClickCount() == 2) {
                        Object source = ev.getSource();
                        Border border;
                        if (source instanceof JButton) {
                            border = BorderFactory.createEmptyBorder();
                            ((JButton)source).setBorder(border);
                            System.out.println("Double clicked");
                        }
                    } else if (ev.getClickCount() == 1) {
                        Object source = ev.getSource();
                        Border border;
                        if(source instanceof JButton){
                            border = BorderFactory.createLineBorder(Color.red);
                            ((JButton)source).setBorder(border);
                            System.out.println("Clicked");
                        }
                    }
                }
        });

Кроме того, как вы можете сказать, я удаляю границу, когда кнопка дважды нажата.

* Дополнительная информация: я попытался удалить команду ((JButton)source).setBorder(border);, и, похоже, без нее никаких проблем не было.

Любая помощь будет оценена.

1 Ответ

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

Проблема в том, что, когда я пытаюсь добавить эту границу, она полностью портит другую JPanel

border = BorderFactory.createLineBorder(Color.red);

Это создает границу с толщиной линии 1, я думаю.

border = BorderFactory.createEmptyBorder();

Это создает границу с толщиной линии 0.

Таким образом, изменение границы приводит к изменению размера кнопки, что может повлиять на макет.

Вместо этого вы должны использовать:

border = BorderFactory.createEmptyBorder(1, 1, 1, 1);

Это предотвратит изменение размера кнопки, поэтому не должно вызывать проблем с макетом. Однако эта граница также должна быть границей по умолчанию для кнопки.

...