JLabel已被点击



我有6个JLabel,每个JLabel都附加了一个不同的mouselistener类实例。如何知道哪个JLabel被点击了?这些JLabel形成了一个二维阵列。

您使用getSource来获得对单击对象的引用:

label1.addActionListener(new yourListener());
label2.addActionListener(new yourListener());
public class yourListener extends MouseAdapter{ 
    public void mouseClicked(MouseEvent e){
        JLabel labelReference=(JLabel)e.getSource();
            labelReference.someMethod();
   }
}

我做这件事最简单的方法是使用JButtons,并通过使用这种语法格式使它们看起来像JLabels。

jButton.setBorder( BorderFactory.createEmptyBorder( 2, 2, 2, 2 ) );
jButton.setBorderPainted( false );
jButton.setContentAreaFilled( false );
jButton.setFocusPainted( false );
jButton.setHorizontalAlignment( SwingConstants.LEFT );

然后,您需要添加一个ActionLister和一个ActionCommand。例如

jButton.addActionListener( this );
jButton.setActionCommand( "label1" );

然后只需处理actionListers就可以为每个标签执行您想要的操作。

public void actionPerformed( ActionEvent arg0 )
{
    String command = arg0.getActionCommand();
    if( command.equalsIgnoreCase( "label1" ) )
    {
        //label1 code
    }
}

如下文所述,这还具有支持键盘和鼠标活动的额外好处。

我根据您的描述将其组合在一起:

public static void main(String[] args) {
    JFrame f = new JFrame();
    f.setLayout(new FlowLayout());
    for (int i = 0; i < 6; i++) {
        JLabel l = new JLabel("Label " + (i + 1));
        l.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                JLabel l = (JLabel) e.getSource(); // here
                System.out.println(l.getText());
            }
        });
        f.add(l);
    }
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.pack();
    f.setLocationRelativeTo(null);
    f.setVisible(true);
}

我认为标有// here的那条线正是你所需要的。

最新更新