2011-02-04 3 views
3

Если у вас есть два JLabel с в JFrame как с тем же MouseListener события нажатия добавил к ним, как вы можете сказать, какой JLabel была нажата без создания второго ActionListener?JLabel нажмите событие

Примечание: обе эти метки имеют один и тот же текст, написанный на них, поэтому их нельзя использовать, чтобы разделить их.

ответ

4

Просто сделайте два JLabel сек поля, а затем проверить источник MouseEvent:

if (e.getSource() == firstLabel) { 
    ... 
} else if (e.getSource() == secondLabel) { 
    ... 
} 
+0

спасибо, теперь он работает – jjj

5

Это поможет вам ссылку на компонент ...

public void mousePressed(MouseEvent e) 
{ 
JComponent reference = e.getComponent(); 
} 

Для более полного описания взгляда на Swing Tutorial on MouseListeners

+0

Хорошо, что дает вам информацию о ярлыке, и если эти ярлыки имеют разные тексты, вы можете использовать их, чтобы рассказать им обособленно, но что, если текст одинаковый? – jjj

+0

@jjj getComponent() или getSource() вернет вам ссылку на объект, вызвавший событие. С этим вы сможете найти, что это такое. выполнив if (component1 == getComponent()) ... else ... –

0

взять, например, клавиатуры. то, что я сделал, когда я создал его, отправляется по кнопке на прослушиватель действий. Затем у меня был прослушиватель действий myButton.getText(); и я бы просто набрал текст на свой экран (в моем случае это JTextfield). в основном методе записи:

JTextField textfield = new JTextField("", 37); 
JButton myButton = new new JButton("button text here"); 
myButton.addActionListener(new MyActionListener (textfield, myButton)); 

полный слушатель действий будет выглядеть следующим образом:

//thisMethod is for a keyboard typing into a JTextfield 
import javax.swing.JTextField; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 
import java.lang.*;  
class MyActionListener implements ActionListener { 
JTextField textfield; 
MyActionListener(JTextField textfield, JButton button) { 
    this.textfield = textfield; 
} 
public void actionPerformed(ActionEvent e) { 
     String letter = javax.xml.bind.DatatypeConverter.printString(textfield.getText()).concat(button.getText()); 
     textfield.setText (letter); 
    } 
} 

это же priciple применяется, когда ссылается, к которой была нажата кнопка. вы можете отправить строку, и эту строку можно использовать в условных операторах, чтобы определить, какая кнопка была нажата.

+0

, но что, если две метки имеют один и тот же текст? – jjj

+0

отправьте строку, поэтому вместо: Текстовое поле JTextField = новый JTextField ("", 37); JButton myButton = новый новый JButton («текст кнопки здесь»); myButton.addActionListener (новый MyActionListener (текстовое поле, myButton)); Вы должны написать: Текстовое поле JTextField = новый JTextField ("", 37); JButton myButton = новый новый JButton («текст кнопки здесь»); myButton.addActionListener (новый MyActionListener (текстовое поле, «myButton»)); , затем в исполнителе действий измените строку MyActionListener (текстовое поле JTextField, кнопка JButton) {...}, в MyActionListener (текстовое поле JTextField, String myString) {...} – Ephraim

+0

, а затем просто добавьте оператор conditionall, чтобы он скажем: if (myString.equals («myButton»)) {textfield.setText («любой текст, который вы бы поставили в этой ситуации»);} – Ephraim

0

Поскольку вы используете JLabel, которая исходит от JComponent имеет метод, называемый putClientProperty («MyValue», MyValue). Вы можете добавить туда уникальный идентификатор после создания JLabel и получить его во время события с помощью getClientProperty («myValue»), а затем проверить его.

Смежные вопросы