【问题标题】:cannot add different mouse event listeners to different panels无法将不同的鼠标事件侦听器添加到不同的面板
【发布时间】:2013-08-12 13:47:12
【问题描述】:

简介:

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

我有所有文件的 jpanel,所以我试图检测点击 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.

感谢您的时间和努力。

【问题讨论】:

    标签: java swing jpanel mouseevent event-listener


    【解决方案1】:

    您可以使用JPanelsetName()/getName() 方法将变量存储在那里。

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

    【讨论】:

    • 谢谢。 +1。在此处添加了新代码作为答案以供将来参考,这当然来自您的答案。
    【解决方案2】:

    或者,创建一个GridLayoutJButton 实例,每个按钮都有一个合适的Action,如here 所示。每个Action 都可以包含对其自己的File 的引用。

    【讨论】:

    • 谢谢,我得到了答案,但是在一个jButton中,我不会使用setactionCommand(name),然后会出现同样的问题吗? name 将始终保存循环中的最后一个值。对于所有子面板,我仍在使用 gridlayout。
    • 不,每个Action都可以看到自己的File
    • 好的。谢谢,但是问题解决了,关于面板大小的任何建议,BorderLayout.CENTER 保存面板,所以所有的都在调整大小,如果我只有两个文件,它会给出一个不好的视图。:(
    • JList 做一个漂亮的图标视图,如图here;如果需要更多名称,也可以考虑putClientProperty()
    【解决方案3】:

    为了以后的参考,我的最终代码,按照 StanislavL 的建议,我首先设置了 jpanel 的名称,

    然后在单击时检索它,并且工作正常。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-01
      • 1970-01-01
      • 2020-06-29
      • 2014-08-26
      • 2013-02-27
      • 2016-07-14
      • 2016-03-24
      相关资源
      最近更新 更多