Получение имени JButton при нажатии

  @Override
  public void actionPerformed(ActionEvent e) {
      if (e.getSource() == thirdBtn) {
          //System.out.println("Third Button Click");
          System.out.println(e.getSource()+" Click");
      }
  }

В приведенном выше коде мне было интересно, если вместо этого:

//System.out.println("Third Button Click");

если бы я мог сделать что-то вроде этого:

System.out.println(e.getSource()+" Click");

Однако код выводит:

BlackJack.OverBoard$BlackJackButton[,440,395,100x25,alignmentX=0.0,alignmentY=0.5,
    border=javax.swing.plaf.BorderUIResource$CompoundBorderUIResource@7a3d8738,
    flags=16777504,maximumSize=,minimumSize=,preferredSize=,
    defaultIcon=,disabledIcon=,disabledSelectedIcon=,
    margin=javax.swing.plaf.InsetsUIResource[top=2,left=14,bottom=2,right=14],
    paintBorder=false,paintFocus=true,
    pressedIcon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,
    text=Change,defaultCapable=true] Click

Я не хочу этого, я хочу знать, как получить имя JButton и вывести его по щелчку.

ИЗМЕНИТЬ:

Некоторые люди в замешательстве. Когда я говорю «имя» (возможно, это неправильное слово), я имел в виду, что вы инициализируете JButton

JButton btnExample = new JButton();

Я хочу, чтобы при нажатии на кнопку выводилось btnExample в консоль.


person Exikle    schedule 14.01.2013    source источник
comment
Невозможно сделать... так, как у вас сейчас. У вас есть три варианта. Вы можете использовать JButton#setText и JButton#getText, которые представляют собой текст, отображаемый на экране, JButton#setName и JButton#getName, которые являются внутренней ссылкой String, так что это может быть что угодно, или вы можете создать свою собственную пользовательскую кнопку и изменить метод toString, который не рекомендуется...   -  person MadProgrammer    schedule 14.01.2013
comment
Я хочу, чтобы при нажатии кнопки в консоли выводилось btnExample. Поскольку эта информация, вероятно, не видна конечному пользователю графического интерфейса и ничего бы для него не значила, если бы он ее увидел, кажется, этот вариант использования относится к коду, работающему во время разработки. Я предполагаю, что здесь действительно нужен отладчик и, возможно, ведение журнала.   -  person Andrew Thompson    schedule 14.01.2013
comment
@AndrewThompson Я понимаю это, но я просто хотел знать в образовательных целях. Спасибо   -  person Exikle    schedule 15.01.2013


Ответы (2)


Вы можете выполнить приведение к JComponent, если знаете, что только JComponents будут возвращаемым значением e.getSource(). Я использую JComponent в качестве приведения, поскольку это обеспечивает большую гибкость. Если вы используете только JButtons, вместо этого вы можете безопасно использовать JButton.

  @Override
            public void actionPerformed(ActionEvent e) {
                if (e.getSource() == thirdBtn) {
                    //System.out.println("Third Button Click");
                    System.out.println(((JComponent) e.getSource()).getName()+" Click");
                }
            }

Смело заменяйте getName() на getText(), в зависимости от того, что именно вам нужно.

Кроме того, оператор == следует использовать только для сравнения ссылок на объекты, поэтому рассмотрите возможность приведения к JComponent с самого начала и использования .equals() для имен или текста.

Редактировать Вы не можете вывести имя переменной, но можете задать имя/текст JComponent. Например

JButton btnExample = new JButton();
btnExample.setName("btnExample");

Или, если вы хотите, чтобы «btnExample» действительно отображалось на кнопке:

JButton btnExample = new JButton();
btnExample.setText("btnExample");
person A--C    schedule 14.01.2013
comment
(Хотя я знаю, что в OP указано имя, большинство разработчиков никогда не устанавливают имя компонента, вместо этого вы можете также включить пример с использованием getText ... ИМХО) - person MadProgrammer; 14.01.2013
comment
@MadProgrammer Вы просто получаете автоматическое уведомление, извините! Я подозреваю, что это связано с тем, что я забыл e, но кто знает? - person A--C; 07.02.2013
comment
Было бы неплохо, если бы голосование против действительно требовало от избирателя оставить комментарий! - person MadProgrammer; 07.02.2013

person    schedule
comment
Спасибо, но это не то, что я имел в виду :( Я спрашиваю, как получить имя объекта. JButton btn; поэтому, когда я вызываю комментарий, он выводит btn - person Exikle; 14.01.2013
comment
@Exikle Определить имя. Что предполагается напечатать?? - person MadProgrammer; 14.01.2013
comment
+1 это хороший динамический подход, а не проверка имени переменной. - person David Kroukamp; 14.01.2013