gpt4 book ai didi

Java:为不同层组件定义 mouseAdapter 的 jLayeredPane 问题

转载 作者:行者123 更新时间:2023-11-29 06:12:00 25 4
gpt4 key购买 nike

我在我的 Java GUI 中使用 jLayeredPane。我在我的 jLayeredPane 的 DEFAULT_LAYER 上添加了一些面板 (jPanelsLayer1),而且每个 jPanel 都有一个 MouseAdapter,它出于我的目的覆盖了 mouseEntered 和 mouseExited。当我在 JlayerdePane 的 PALETTE_LAYER 上添加另一个组件 (jPanelsLayer2),在 jPanelsLayer1 的顶部,并为它们定义 MouseAdapter 时,我遇到了问题。当鼠标进入公共(public)区域时,不同层的jPanel的mouseEntered和mouseExited连续运行几次。我只希望 jPanelslayer2 mouseAdapters 在 jpanelLayer1 的顶部看到时处于 Activity 状态。也许一个解决方案是删除 jPanelLayer1 mouseAdapter。但这是无效的。

请指导我.....sajad

最佳答案

我不确定您的问题出在哪里,因为当我对其进行测试时,即使调色板位于默认面板上方,鼠标也仅在调色板面板位于调色板面板上方时才在调色板面板中处于 Activity 状态。例如这是我的 SSCCE来测试这个概念。请随意修改它以向我们展示您的问题:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.event.*;

import javax.swing.*;

@SuppressWarnings("serial")
public class LayeredFun extends JLayeredPane {
private static final int JLP_WIDTH = 400;
private static final int JLP_HEIGHT = 400;
private static final Dimension PANEL_SIZE = new Dimension(200, 200);

public LayeredFun() {
JPanel defaultPanel = createPanel("Default Panel", new Point(10, 10), Color.cyan);
JPanel palettePanel = createPanel("Palette Panel", new Point(100, 100), Color.pink);

add(defaultPanel, JLayeredPane.DEFAULT_LAYER);
add(palettePanel, JLayeredPane.PALETTE_LAYER);
}

private JPanel createPanel(String name, Point location, Color color) {
JPanel defaultPanel = new JPanel();
defaultPanel.setSize(PANEL_SIZE);
defaultPanel.setLocation(location);
MyMouseAdapter defaultMouseAdapater = new MyMouseAdapter(name);
defaultPanel.addMouseListener(defaultMouseAdapater);
defaultPanel.addMouseMotionListener(defaultMouseAdapater);
defaultPanel.setBackground(color);
defaultPanel.setBorder(BorderFactory.createTitledBorder(name));
return defaultPanel;
}

@Override
public Dimension getPreferredSize() {
return new Dimension(JLP_WIDTH, JLP_HEIGHT);
}

private class MyMouseAdapter extends MouseAdapter {
private String name;

public MyMouseAdapter(String name) {
this.name = name;
}

@Override
public void mouseEntered(MouseEvent e) {
System.out.printf("%s: mouseEntered%n", name);
}

@Override
public void mouseExited(MouseEvent e) {
System.out.printf("%s: mouseExited%n", name);
}

@Override
public void mouseMoved(MouseEvent e) {
System.out.printf("%s: mouseMoved%n", name);
}
}

private static void createAndShowUI() {
JFrame frame = new JFrame("LayeredFun");
frame.getContentPane().add(new LayeredFun());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}

public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
createAndShowUI();
}
});
}
}

关于Java:为不同层组件定义 mouseAdapter 的 jLayeredPane 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6454985/

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