我的FatherPanel
通过鼠标输入(RED)/退出(ORANGE)鼠标事件更改颜色。它运作良好,但当我进入按钮" Testbutton" (这是我父亲面板的子组件)出现鼠标退出事件。但我仍在父亲面板内。
有人可以解释一下为什么以及如何解决这样的问题?
只要我的鼠标在该面板内(无论鼠标是否在子对象上),我希望父面板为橙色。
public class MainFrame extends JFrame {
public MainFrame() {
FatherPanel fatherPanel = new FatherPanel();
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(800, 700);
setLayout(null);
add(fatherPanel);
fatherPanel.setBounds(150, 20, 300, 300);
}
public class FatherPanel extends JPanel{
JButton btn1 = new JButton("Testbutton");
public FatherPanel() {
setSize(300, 300);
setLayout(null);
setBackground(Color.RED);
add(btn1);
btn1.setBounds(150, 150, 100, 100);
addMouseListener(new MouseListener() {
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
setBackground(Color.RED);
}
@Override
public void mouseEntered(MouseEvent e) {
setBackground(Color.ORANGE);
}
@Override
public void mouseClicked(MouseEvent e) {
}
});
}
}
}
答案 0 :(得分:2)
在mouseExited事件中,您可以检查鼠标点以查看它是否仍在父组件的边界内。
类似的东西:
public int minsteNummer(Integer[] nummer) {
int minste = Integer.MAX_VALUE;
for(int i = 0; i< nummer.length; i++){
if(nummer[i] < minste ) {
minste = nummer[i] ;
}
if(minste != Integer.MAX_VALUE)
return minste;
else
return 0;
}
注意:扩展addMouseListener(new MouseAdapter()
{
@Override
public void mouseExited(MouseEvent e)
{
Rectangle r = e.getComponent().getBounds();
Point p = e.getPoint();
if (p.x < 0 || p.x >= r.width
|| p.y < 0 || p.y >= r.height)
setBackground( Color.RED );
}
@Override
public void mouseEntered(MouseEvent e)
{
setBackground( Color.ORANGE );
}
});
更容易,因为您只需要实现您想要处理的方法。