Java,单击后将边框设置为按钮会弄乱另一个JPanel

时间:2019-01-10 11:06:09

标签: java swing mouseevent jbutton

如标题中所述,我有一个JButton,单击该按钮时我想为其添加边框。探查是,当我尝试添加该边框时,它完全弄乱了我拥有的另一个JPanel,并重新放置了所有内容在上面。 这是我的mouseClicked的代码:

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 :(得分:2)

  

该问题是,当我尝试添加该边框时,它完全弄乱了另一个JPanel

border = BorderFactory.createLineBorder(Color.red);

这会创建一个边框,其线条粗细为1,我猜。

border = BorderFactory.createEmptyBorder();

这将创建一个线宽为0的边框。

因此,更改边框会导致按钮的大小改变,从而影响布局。

相反,您应该使用:

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

这将使按钮的大小保持不变,因此不会引起布局问题。但是,此边框也应该是按钮的默认边框。