gpt4 book ai didi

java - 由 JPanel 实现时,MouseEvent 不会触发

转载 作者:行者123 更新时间:2023-12-02 07:46:30 24 4
gpt4 key购买 nike

好的,在我正在制作的这个程序中,用户将能够在计算机上创建他们最喜欢的应用程序的快捷方式。我想,我的程序有点像应用程序的中心。不过,我有一个小问题,涉及两个类:AppButtonAppButtonContainer。它们都实现了 MouseListener,但 AppButton 扩展了 JComponent,而 AppButtonContainer 扩展了 JPanel。基本上,当单击 AppButton 时,它会设置以不同颜色绘制边框以使其看起来被选中。否则,它将边框设置为背景颜色。当您双击它时,它会打开指定的应用程序。我在 AppButton 中有一个方法可以删除焦点,从而将边框设置为背景颜色。在 AppButtonContainer 中,有一些代码,以便当单击面板时,它会从 AppButton 中删除焦点。

不过,这是我的问题。 AppButtonContainer 没有意识到它被点击了。我认为这与顶级容器或其他东西有关,但我不确定。有人可以帮忙吗?

编辑:我发现我没有将 addMouseListener(this) 放入 AppButtonContainer 的构造函数中。感谢所有帮助我解决这个问题并一路给我提示的人:)

AppButtonContianer:

public class AppButtonContainer extends JPanel implements MouseListener {
private static final long serialVersionUID = 6485231881729120957L;
public List<AppButton> appButtons;
private static final Color BACKGROUND_COLOR = new Color(18, 18, 18);

public AppButtonContainer(List<AppButton> buttons) {
this.appButtons = buttons;
setLayout(new GridLayout(5, 5, 20, 20));
addButtonsToPane();
}

private void addButtonsToPane() {
List<AppButton> buttons = this.appButtons;
for (int i = 0; i < buttons.size(); i++) {
this.add(buttons.get(i));
}
}

private void removeAllButtonFocus() {
for (int i = 0; i < this.appButtons.size(); i++) {
this.appButtons.get(i).removeFocus();
}
}

@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
setBackground(BACKGROUND_COLOR);
repaint();
}

@Override
public void mouseClicked(MouseEvent e) {
System.out.println("Pane Clicked");
removeAllButtonFocus();
}

...Other MouseEvent methods

最佳答案

您可以通过将 addMouseListener(this) 放入 AppButtonContainer 类的构造函数中来解决当前的问题。否则,它永远不会拾取鼠标事件。

不过,一般来说,将类变成这样的鼠标监听器并不好。也许尝试创建一个内部类来监听鼠标事件并将它们传递给 AppButtonContainer。

关于java - 由 JPanel 实现时,MouseEvent 不会触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10766135/

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