【问题标题】:How set something with mouselistener based on getX and getY to labels?如何使用基于 getX 和 getY 的 mouselistener 设置标签?
【发布时间】:2016-03-31 11:30:58
【问题描述】:

我有这个:label = new JLabel[9][9]。我想为标签设置一个新图标(对于我点击的标签,当然)。我也有一个面板(带有网格布局),其中有标签,它是 500x500。

所以在mouselistener 中,我知道,我可以使用getX() 和getY()。在那之后,我怎么能说我点击了哪一行和哪一列?我应该将面板分成小区域吗?我希望这个问题是可以理解的。我在这里阅读了类似这样的问题,但我并没有真正找到答案......

到目前为止,我写的是:

            public void mouseClicked(MouseEvent e){

                int mouseX = e.getX();
                int mouseY = e.getY();
                int i = 0;
                int j = 0;



                URL url = Click.class.getResource("image.png");
                ImageIcon img = new ImageIcon(url);
                label[i][j] = new JLabel(img);
            }

【问题讨论】:

  • "I've got this: label.." 此时我会使用未修饰的JButtonJToggleButton .. "@987654324 @" .因为按钮具有在悬停、聚焦、按下等时在图像之间切换的内置方法。不需要任何特定的侦听器。
  • "..怎么说我点击了哪一行哪一列?" 如果每个标签都添加了监听器,可以e.getSource()知道是哪一个是事件的来源..
  • 谢谢。你能给我举个 getSource() 的例子吗,我该怎么用呢?
  • 我同意 Andrew 的观点:不要试图通过使用布局计算标签应该的位置来确定鼠标应该在哪个标签上只是为每个组件(即标签)提供侦听器,并让 UI 框架为您完成工作。
  • 事件源是你点击的组件。只需检查它是否是标签,在源上投射并设置新图标。

标签: java swing labels mouselistener


【解决方案1】:

您说您有一个带有 GridLayout 的面板。你还没说你给它起什么名字,我们就叫它p吧。

在您的 mouseClicked 方法中,执行以下操作:

JLabel jlb = (JLabel) p.getComponentAt(e.getX(),e.getY());

现在做任何你想做的事。

【讨论】:

    猜你喜欢
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    • 2019-04-12
    • 1970-01-01
    • 2013-05-16
    • 2011-09-08
    • 2021-05-03
    • 1970-01-01
    相关资源
    最近更新 更多