java - 无法将不同的鼠标事件监听器添加到不同的面板

标签 java swing jpanel mouseevent event-listener

简介:

我试图在 GridView 中显示文件夹中的所有文件,当单击该文件时,我应该在命令行上打印出该名称。

我有所有文件的 jpanels,因此我试图循环检测 jpanel 上的点击并将操作分配给该面板。

我的问题,

当使用for循环时,我有变量“name”,它保留文件的名称,我试图像这样添加鼠标监听器,

panel[i].addMouseListener(new MouseAdapter(){
    public void mouseClicked(MouseEvent e){
        System.out.println("MOUSE_RELEASED_EVENT:for "+name);
    }
});

正如您所注意到的,我正在迭代 i,从而将鼠标监听器添加到所有面板,但问题是变量名称本身正在鼠标监听器中使用。

示例

如果上面写的不是解释它的方式,我的意思是说我有两个文件,A和B。

我正在寻找的是,第一个鼠标监听器是,

System.out.println("MOUSE_RELEASED_EVENT:for A"); //Since name="A" here.

对于第二个文件是,

System.out.println("MOUSE_RELEASED_EVENT:for B");  //Since name="B" here.

但是它不会以这种方式发生,变量名称本身附加到鼠标监听器,我得到的始终是名称的最终值,在我的示例中始终为“B”。因为它是循环中 name 的最后一个值。

如何解决这个问题?

另外,有人可以告诉我是否可以在 BorderLayout 中修复子面板的大小吗?无论我使用什么,它们都会调整大小,setSize、setPreferredSize、setMaximumSize、setMinimumSize。

感谢您的时间和努力。

最佳答案

您可以使用 JPanelsetName()/getName() 方法在此处存储变量。

然后在监听器中只需使用 ((JPanel)event.getSource()).getName();

关于java - 无法将不同的鼠标事件监听器添加到不同的面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18188655/

相关文章:

java - 在 JCalendar 中禁用过去的日期和 2 周后的日期

java - 在 Java 中重绘图形

java - 由 netbeans 创建的 .Jar 文件在 Windows 上不再打开

Java XMLStreamWriter : Outputting Unicode extended characters (non-BMP)

java - JToolBar 防止最小化

java - 在 Activity 期间更新 JLabel 的标签文本 - Swing

java - 获取 JLabels java 网格布局中元素的位置(行和列)

java - jpanel 上的 Keylistener 不起作用

Java 分析 - 检测导致峰值的原因

java - 如何获取由原始字符串保留顺序的所有唯一字符组成的字符串?