определить, какая кнопка нажата в java? [Дубликат]

Вы можете использовать библиотеку Gson для синтаксического анализа строки JSON.

Gson gson = new Gson();
JsonObject jsonObject = gson.fromJson(jsonAsString, JsonObject.class);

String pageName = jsonObject.getAsJsonObject("pageInfo").get("pageName").getAsString();
String pagePic = jsonObject.getAsJsonObject("pageInfo").get("pagePic").getAsString();
String postId = jsonObject.getAsJsonArray("posts").get(0).getAsJsonObject().get("post_id").getAsString();

Вы также можете прокручивать массив «posts» следующим образом:

JsonArray posts = jsonObject.getAsJsonArray("posts");
for (JsonElement post : posts) {
  String postId = post.getAsJsonObject().get("post_id").getAsString();
  //do something
}
2
задан Paul Samsotha 4 March 2014 в 05:44
поделиться

3 ответа

У вас есть пара вариантов. В текущем случае у вас есть, где объекты JButton локально локализованы внутри конструктора, вам нужно будет проверить actionCommmand, потому что объекты недоступны из ActionListener с их текущей областью. Таким образом, вы можете сделать это

class ButtLis implements ActionListener{
    @Override
    public void actionPerformed(ActionEvent e) {
        String command = e.getActionCommand();
        if ("One".equals(command)) {
            // do something
        }
    }
}

. Если вы хотите сравнить источник объекта, вам нужно будет дать вашим кнопкам глобальную область действия

public class Foo {
    JButton button = new JButton("One");
    JButton button2 = new JButton("Two");

    class ButtLis implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {
            if (e.getSource() == button) {

            }
        }
    }
}

. Третья опция - зарегистрировать кнопок

public void go() {
    ...
    button.addActionListener(new ActionListener(){
         @Override
         public void actionPerformed(ActionEvent e) {
             // do something
         }
    });
}

См. больше в Как использовать кнопку Common и Как писать ActionListeners

2
ответ дан Paul Samsotha 28 August 2018 в 00:20
поделиться

Внутри вашего ButtLis добавьте это

class ButtLis implements ActionListener {
    public void actionPerformed(ActionEvent e) {
       e.getSource();
       //Your implementation
    }
}
0
ответ дан Aditya 28 August 2018 в 00:20
поделиться

Я думаю, что это то, что вы ищете, хотя я бы вряд ли рекомендовал его:

class ButtLis implements ActionListener {
    private JTextArea text;

    public ButtLis(JTextArea text) {
        this.text = text;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        JButton button = (JButton)e.getSource(); // Warning! This is not good coding practice, because you don't know that the source will be a button
        text.append(button.getText());
    }
}

Вместо этого я бы рекомендовал:

JButton button1 = new JButton("One");
button1.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        text.append("one");
    }
});

, который использует «анонимный внутренний класс» для определения слушателя действий. Для Button2 вы бы сказали подобное. Преимущества здесь в том, что прослушиватель действий находится рядом с кнопкой, на которой он работает, и это мешает вам иметь единственный ActionListener, который должен проверить, откуда произошло каждое событие (используя e.getSource()).

1
ответ дан David Koelle 28 August 2018 в 00:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: