在Java中,如何获取被单击的组件的名称

在Java中,如何获取被单击的组件的名称,java,swing,mouselistener,Java,Swing,Mouselistener,我想知道单击的组件的名称,因为我正在执行以下操作: @Override public void mouseClicked(MouseEvent clicked) { if( clicked.getSource() instanceof JLabel ) System.out.println( clicked.getComponent().getName() ); } public void mousePressed(java.awt.

我想知道单击的组件的名称,因为我正在执行以下操作:

@Override
    public void mouseClicked(MouseEvent clicked) {
        if( clicked.getSource() instanceof JLabel )
            System.out.println( clicked.getComponent().getName() );
    }
  public void mousePressed(java.awt.event.MouseEvent evt)
  {
    javax.swing.JLabel senderName = (javax.swing.JLabel) evt.getSource();
    switch(senderName.getName())
    {
      case "myLabel" : //DO what ever you want to do
      ...........
    }
  }
但这将返回“null”,请告诉我如何获取单击的组件名称?

默认情况下返回
null
,因此您需要明确设置它:

label.setName("MyLabel");
默认情况下返回
null
,因此需要显式设置:

label.setName("MyLabel");
默认情况下返回
null
,因此需要显式设置:

label.setName("MyLabel");
默认情况下返回
null
,因此需要显式设置:

label.setName("MyLabel");
作为

莱默斯

组件的名称不是像其他编程语言那样自动或隐式设置的,必须先显式设置名称

您可以通过指定名称来完成此操作,例如在构造时使用

(正如莱默斯所说)

另一种方法是(例如,如果您在NetBeans设计模式下创建表单生成器),在您最喜欢的GUI构造函数(Eclipse、NetBeans、IntelliJ…)中指定name属性

如果您已经这样做了,那么当您对侦听器进行编程时,您可以使用getSource()获取生成事件的对象,并将其强制转换为您已知的控件类型,在本例中为JLabel。 然后可以使用getName()

它看起来像这样:

@Override
    public void mouseClicked(MouseEvent clicked) {
        if( clicked.getSource() instanceof JLabel )
            System.out.println( clicked.getComponent().getName() );
    }
  public void mousePressed(java.awt.event.MouseEvent evt)
  {
    javax.swing.JLabel senderName = (javax.swing.JLabel) evt.getSource();
    switch(senderName.getName())
    {
      case "myLabel" : //DO what ever you want to do
      ...........
    }
  }
希望它能对你有所帮助。

莱默斯

组件的名称不是像其他编程语言那样自动或隐式设置的,必须先显式设置名称

您可以通过指定名称来完成此操作,例如在构造时使用

(正如莱默斯所说)

另一种方法是(例如,如果您在NetBeans设计模式下创建表单生成器),在您最喜欢的GUI构造函数(Eclipse、NetBeans、IntelliJ…)中指定name属性

如果您已经这样做了,那么当您对侦听器进行编程时,您可以使用getSource()获取生成事件的对象,并将其强制转换为您已知的控件类型,在本例中为JLabel。 然后可以使用getName()

它看起来像这样:

@Override
    public void mouseClicked(MouseEvent clicked) {
        if( clicked.getSource() instanceof JLabel )
            System.out.println( clicked.getComponent().getName() );
    }
  public void mousePressed(java.awt.event.MouseEvent evt)
  {
    javax.swing.JLabel senderName = (javax.swing.JLabel) evt.getSource();
    switch(senderName.getName())
    {
      case "myLabel" : //DO what ever you want to do
      ...........
    }
  }
希望它能对你有所帮助。

莱默斯

组件的名称不是像其他编程语言那样自动或隐式设置的,必须先显式设置名称

您可以通过指定名称来完成此操作,例如在构造时使用

(正如莱默斯所说)

另一种方法是(例如,如果您在NetBeans设计模式下创建表单生成器),在您最喜欢的GUI构造函数(Eclipse、NetBeans、IntelliJ…)中指定name属性

如果您已经这样做了,那么当您对侦听器进行编程时,您可以使用getSource()获取生成事件的对象,并将其强制转换为您已知的控件类型,在本例中为JLabel。 然后可以使用getName()

它看起来像这样:

@Override
    public void mouseClicked(MouseEvent clicked) {
        if( clicked.getSource() instanceof JLabel )
            System.out.println( clicked.getComponent().getName() );
    }
  public void mousePressed(java.awt.event.MouseEvent evt)
  {
    javax.swing.JLabel senderName = (javax.swing.JLabel) evt.getSource();
    switch(senderName.getName())
    {
      case "myLabel" : //DO what ever you want to do
      ...........
    }
  }
希望它能对你有所帮助。

莱默斯

组件的名称不是像其他编程语言那样自动或隐式设置的,必须先显式设置名称

您可以通过指定名称来完成此操作,例如在构造时使用

(正如莱默斯所说)

另一种方法是(例如,如果您在NetBeans设计模式下创建表单生成器),在您最喜欢的GUI构造函数(Eclipse、NetBeans、IntelliJ…)中指定name属性

如果您已经这样做了,那么当您对侦听器进行编程时,您可以使用getSource()获取生成事件的对象,并将其强制转换为您已知的控件类型,在本例中为JLabel。 然后可以使用getName()

它看起来像这样:

@Override
    public void mouseClicked(MouseEvent clicked) {
        if( clicked.getSource() instanceof JLabel )
            System.out.println( clicked.getComponent().getName() );
    }
  public void mousePressed(java.awt.event.MouseEvent evt)
  {
    javax.swing.JLabel senderName = (javax.swing.JLabel) evt.getSource();
    switch(senderName.getName())
    {
      case "myLabel" : //DO what ever you want to do
      ...........
    }
  }

希望对您有所帮助。

您确定组件的名称实际上不是空的吗?@Hexafrance事实上这不太可能-如果有人将名称设置为
null
他们会意识到他们实际上需要首先设置它您确定组件的名称实际上不是空的吗,null?@hexafrance实际上这不太可能-如果有人将名称设置为
null
,他们会意识到他们实际上首先需要设置它。你确定组件的名称实际上不是,null?@hexafrance实际上这不太可能-如果有人将名称设置为
null
,他们会意识到他们实际上首先需要设置它。你确定组件的名称实际上不是,空?@hexafrance实际上这不太可能-如果有人将名称设置为
null
,他们会意识到他们实际上需要首先设置它