我有6个JLabel,每个都附加了一个不同的mouselistener类实例。如何知道点击了哪个JLabel?这些JLabel形成了一个二维数组。
答案 0 :(得分:2)
使用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();
}
}
答案 1 :(得分:2)
我做这样的最简单的方法是,使用JButtons并使用这种语法格式使它们看起来像JLabel。
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" );
然后只需处理actionListners即可为每个标签执行所需操作。
public void actionPerformed( ActionEvent arg0 )
{
String command = arg0.getActionCommand();
if( command.equalsIgnoreCase( "label1" ) )
{
//label1 code
}
}
如下所述,这还有支持键盘和鼠标活动的额外好处。
答案 2 :(得分:1)
我根据你的描述把它放在一起:
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
的行主要是您需要的。