Заполнять JTextField при двойном щелчке по элементу JList

#java #swing #mouseevent #jlist

#java #качать #mouseevent #jlist

Вопрос:

Я пытаюсь заполнить a JTextArea из a JList , когда пользователь дважды щелкает по элементу. Я не совсем уверен, как это сделать, вот что у меня есть на данный момент.

 // Create Top Right JPanel and JList
        String[] listB = { "Some content on the right panel", "More content", "Some more content", "More and more content", "More and more content", "More and more content",
                "More and more content", "More and more content", "More and more content", "More and more content", "More and more content", "More and more content", "More and more content", "More and more content", 
                "More and more content" }; 
        final JList listBottom = new JList(listB);
        listBottom.setVisibleRowCount(12);
        JScrollPane scrollPaneB = new JScrollPane(listBottom);
        panelBottom.add(scrollPaneB);
        scrollPaneB.setViewportView(listBottom);
        scrollPaneB.setBorder(BorderFactory.createTitledBorder("Bottom Panel"));
        scrollPaneB.setVisible(true);
        //listBottom.setVisible(true);
        listBottom.setBorder(BorderFactory.createLoweredBevelBorder());

        // Create Top Right Action Listener
        listBottom.addListSelectionListener(new ListSelectionListener(){

            @Override
            public void valueChanged(ListSelectionEvent arg0) {
                Selection selectionB = (Selection)listBottom.getSelectedValue();

                textField.setText(selectionB.getContents());


            }

        });
  

Комментарии:

1. Мне любопытно, как вы реализовали функциональность клавиши ввода?

Ответ №1:

Вы просто добавляете прослушиватель, выбранный мышью, и проверяете, нажимает ли мышь на JList.

     String[] listB = { "Some content on the right panel", "More content", "Some more content", "More and more content", "More and more content", "More and more content",
            "More and more content", "More and more content", "More and more content", "More and more content", "More and more content", "More and more content", "More and more content", "More and more content", 
            "More and more content" }; 


    final JList listBottom = new JList(listB);
    ....//other code
    listBottom.addMouseListener(new MouseAdapter(){

        //Called when you click the JList
        public void mouseClicked(MouseEvent e) {

            JList list = (JList)e.getSource();
            //Makes sure it only registers for single clicks(always registers even on double clicks, just registers twice.)
            if (e.getClickCount() == 1) {

                //Gets the point where you clicked and returns the index of the element at that point
                int index = list.locationToIndex(e.getPoint());
                //Makes sure that where you clicked was an element and that it is a String(We know it will be but its better to be safe)
                if(list.getModel().getElementAt(index) != nullamp;amp;list.getModel().getElementAt(index) instanceof String){
                    //Populates your textField with the element at this index
                    textField.setText(list.getModel().getElementAt(index));
                }
            }
        }
    });
  

Надеюсь, это поможет!

Ответ №2:

Я пытаюсь заполнить JTextArea из JList, когда пользователь дважды щелкает по элементу.

При разработке графического интерфейса пользователь должен иметь возможность использовать мышь или клавиатуру для вызова действия над компонентом.

Проверьте действие списка. Он будет вызывать, Action когда вы double click используете Enter ключ. Все, что вам нужно сделать, это создать Action .