Добавление ActionListener в JList - PullRequest
5 голосов
/ 10 апреля 2011

У меня есть JList с массивом строк. В основном это отображает меню ресторана. прямо рядом с JList у меня есть другой JList, который пуст. Всякий раз, когда пользователь дважды щелкает строку в первом JList (где отображается меню), я хочу, чтобы он отображался в следующем JList, который находится рядом с ним.

как мне это сделать?

Ответы [ 4 ]

12 голосов
/ 10 апреля 2011

Вы можете попробовать

final JList list = new JList(dataModel);
MouseListener mouseListener = new MouseAdapter() {
    public void mouseClicked(MouseEvent e) {
        if (e.getClickCount() == 2) {


           String selectedItem = (String) list.getSelectedValue();
           // add selectedItem to your second list.
           DefaultListModel model = (DefaultListModel) list2.getModel();
           if(model == null)
           {
                 model = new DefaultListModel();
                 list2.setModel(model);
           }
           model.addElement(selectedItem);

         }
    }
};
list.addMouseListener(mouseListener);
2 голосов
/ 07 августа 2015

Вы также можете сделать это с нажатой клавишей Enter, добавив KeyListener:

jlist.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
    if (e.getKeyCode() == KeyEvent.VK_ENTER){
   //do what you want to do    
}
}
});

Я знаю, что это не для двойного щелчка, но некоторые люди хотят сделать это с помощью кнопки Enterвместо этого, как я хотел сделать.

1 голос
/ 29 марта 2017
public void addActionListener(final ActionListener al) {

    jList.addKeyListener(new KeyAdapter() {
        public void keyPressed(KeyEvent e) {
            if (e.getKeyCode() == KeyEvent.VK_ENTER) {
                al.actionPerformed(new ActionEvent(e.getSource(), e.getID(), "ENTER"));
            }
        }
    });

    jList().addMouseListener(new MouseAdapter() {
        public void mouseClicked(MouseEvent e) {
            if (e.getClickCount() == 2) {
                al.actionPerformed(new ActionEvent(e.getSource(), e.getID(), "ENTER"));
            }
        }
    });

}
0 голосов
/ 10 апреля 2011

Я уже сделал это в вашем коде в другом вопросе? [ссылка] Я хочу добавить прослушиватель действий из одного JList в другой JList и как JList может отображаться без какого-либо текста внутри?

Единственное, что вам нужно сделать, это вставить его в оператор @Bala R's if, проверяющий количество кликов:

if (e.getClickCount () == 2) {

// ваш код

}

На самом деле вам лучше использовать addElement (selectedItem); метод, как в коде @Bala R вместо add (orderList.getModel (). getSize (), selectedItem); в моем коде. Оба добавляют элемент в конец, но addElement выглядит лучше, и вам не нужно извлекать размер модели.

Ой, Боро.

...