Как получить данные из JButton? - PullRequest
2 голосов
/ 18 апреля 2019

Я хочу создать JButton элементы управления из цикла, а затем использовать обработчик событий для извлечения соответствующей информации и дальнейшей обработки с помощью команд SQL.

Однако я не могу получить доступ к имени компонента или текстовым полям компонентаиз созданных объектов кнопки.

try {
    String SQL = "SELECT * FROM Products";
    ResultSet rs = GetDB.AccessDatabse(SQL);

    while(rs.next()){
        JButton btn = new JButton();
        btn.setText(rs.getString("ProductName"));
        btn.setName(rs.getString("ProductName"));
        System.out.println(btn.getName()); 
        btn.addActionListener(this);
        add(btn);
                    }
    }   
 catch (SQLException ex) {System.out.println("GUI Creation Error");}    
}

    @Override
    public void actionPerformed(ActionEvent ae){
        System.out.println(this.getName()); 
    }

Я ожидаю, что имя кнопки будет установлено на результат SQL-запроса, но при попытке напечатать результат отображает "frame0" для каждой кнопки.

Текстовая область каждой кнопки работает

1 Ответ

1 голос
/ 18 апреля 2019

Вы звоните getName() на this, это не кнопка, это ваш контекст контекста, который является вашим JFrame.

Вам необходимо проанализировать источник ActionEvent.

Здесь я сделал несколько быстрых кодов, которые могли бы делать то, что вы хотите:

actionPerformed(ActionEvent e) { 
  if(e.getSource() instanceof JButton) {
    //Casting here is safe after the if condition
    JButton b = (JButton) e.getSource();
    System.out.println(b.getText());
  } else {
    System.out.println("Something other than a JButton was clicked");
  }
}  

Что я делаю: я проверяю, является ли источник действия JButton, а затем приводим его кновая локальная переменная, а затем получить текст этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...