BorderLayout没有将组件定位在正确的位置

Ash*_*nko 0 java swing layout-manager mouselistener

我分别在MouseEnter和MouseExit上添加和删除JButton.这工作正常,但当按钮添加到面板时,它会显示在右上角而不是BorderLayout.SOUTH指定的位置.

Frame只有一个JPanel,我添加的唯一一行是

 jPanel1.addMouseListener(new myMouseListener(jPanel1));
Run Code Online (Sandbox Code Playgroud)

鼠标监听器

package example;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JButton;
import javax.swing.JPanel;
public class myMouseListener extends MouseAdapter{
    JButton btn;
    JPanel panel;

    public myMouseListener(JPanel panel)
    {
        this.panel = panel;
        this.btn = new JButton("Test");
        this.btn.setSize(40, 40);
    }

    public void mouseEntered(MouseEvent e) {
        panel.setBackground(Color.red);
        panel.add(btn, BorderLayout.SOUTH);
    }

    public void mouseExited(MouseEvent e) {
       panel.setBackground(Color.blue);
       panel.remove(btn);
    }
}
Run Code Online (Sandbox Code Playgroud)

你可以在这里下载一个sscce
http://www.filehosting.org/file/details/302851/Example.zip

任何人都可以对这个问题有所了解吗?

Sta*_*avL 5

呼叫

revalidate();
repaint(); 
Run Code Online (Sandbox Code Playgroud)

添加/删除后.

可能是让它变得可见/不可见更好吗?