gpt4 book ai didi

java - 将鼠标事件分派(dispatch)到最深的可见 JComponent

转载 作者:行者123 更新时间:2023-12-01 09:09:19 25 4
gpt4 key购买 nike

屏幕上方有一个透明的JPanel,并在其上添加了一个背景JPanel和一个JButton(全部可见且可见)有鼠标监听器)

在透明面板的监听器中处理鼠标事件后,应将它们分派(dispatch)到下一个更深的组件(即背景面板或其按钮)

单击背景面板可以,但单击按钮会导致出现不需要的 ClassCastException

示例:

//making frame
frame=new JFrame();
frame.setVisible(true);

//making layered pane
layeredPane = new JLayeredPane();
frame.add(layeredPane);


//transparent panel on top
frontPanel = new JPanel();
frontPanel.setOpaque(false);
layeredPane.add(frontPanel,Integer.valueOf(1));

//background panel containing a button
backPanel = new JPanel();
JButton button = new JButton();
backPanel.add(button);
layeredPane.add(backPanel,Integer.valueOf(0));

//listeners
button.addMouseListener(new MouseListener()...a blank listener...);
backPanel.addMouseListener(new MouseListener()...a blank listener...);
frontPanel.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
SwingUtilities.getDeepestComponentAt(backPanel, e.getX(), e.getY()).dispatchEvent(e);
}

@Override
public void mousePressed(MouseEvent e) {
SwingUtilities.getDeepestComponentAt(backPanel, e.getX(), e.getY()).dispatchEvent(e);
}

@Override
public void mouseReleased(MouseEvent e) {
SwingUtilities.getDeepestComponentAt(backPanel, e.getX(), e.getY()).dispatchEvent(e);
}

@Override
public void mouseEntered(MouseEvent e) {
}

@Override
public void mouseExited(MouseEvent e) {
}
});

//setting dimensions
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
frontPanel.setSize(screenSize);
backPanel.setSize(screenSize);
frame.setSize(screenSize);
//now clicking on the button cause a ClassCastException: JPanel cannot be cast to javax.swing.AbstractButton. why?

最佳答案

您不能只调度旧事件。旧事件包含有关原始事件(即组件源)的信息。

您需要在分派(dispatch)之前创建一个新的 MouseEvent

例如,请参阅 How to Use Root Panes 上 Swing 教程中的 GlassPaneDemo .

关于java - 将鼠标事件分派(dispatch)到最深的可见 JComponent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41016732/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com