получить один и тот же ActionEvent для добавления и выбора элемента в Java ComboBox - PullRequest
0 голосов
/ 18 января 2019

У меня есть ActionListener для моего Jcombobox, который должен добавить новую строку в таблицу при выборе элемента из comboBox, к сожалению, у меня также есть возможность вставить новый элемент в тот же comboBox.

Моя проблема в том, что оба действия имеют одно и то же событие действия "comboBoxChanged"

вот код:

cmbAllMovies.addActionListener(new ActionListener() {
			
	@Override
	public void actionPerformed(ActionEvent e) {
			
		Movie movie = (Movie) cmbAllMovies.getSelectedItem();
		Object [] rowData= {movie.getName(),movie.getYear(),movie.getlanguage()}; 
		tblModel.addRow(rowData);
	}
});

спасибо,

1 Ответ

0 голосов
/ 21 января 2019

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

Решение состоит в том, чтобы удалить прослушиватель действий из выпадающего списка в тот момент, когда вы добавляете в него новый элемент, а затем восстановить / повторно добавить прослушиватель действий.

SSCCE

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class Test extends JFrame implements ActionListener {

    private JComboBox<String> comboBox;

    public Test() {
        super("test");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        getContentPane().setLayout(new FlowLayout());
        String[] movies = { "Rambo 1", "Rocky 1", "Fargo", };
        comboBox = new JComboBox<>(movies);
        comboBox.addActionListener(this);
        JTextField textField = new JTextField(10);
        JButton button = new JButton("Add movie");
        button.addActionListener(e -> {
            String selectedMovie = textField.getText();
            comboBox.removeActionListener(this);// Remove the action listener
            comboBox.addItem(selectedMovie); // Add the movie without any action listener
            comboBox.addActionListener(this); // Restore action listener
        });
        add(comboBox);
        add(textField);
        add(button);
        setSize(300, 300);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            new Test().setVisible(true);
        });
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println(comboBox.getSelectedItem() + " is a great movie.");
    }

}
...