这是我第一次使用MouseListener,我不知道如何实现它。

这是代码:

 DefaultListModel<Object> listModel = new DefaultListModel<Object>();
 try {
listModel = readLines(file);
    //this function basically converts the file in a defaultlistmodel
 } catch (Exception e) {
e.printStackTrace();
 }

  JList<Object> list = new JList<Object>();
  list.setModel(listModel);
  JScrollPane scrollPane = new JScrollPane(list);
  list.setBackground(Color.WHITE);
  list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
  list.setLayoutOrientation(JList.VERTICAL);
  scrollPane.setBounds(10, 21, 130, 267);
  westPanel.add(scrollPane, BorderLayout.CENTER);


我想要的是创建一个鼠标侦听器,当我从列表(滚动窗格)中单击Object时,将其保存(getElementAt(index))并在其他地方实现它,例如在其他文本字段中。

最佳答案

不要在MouseListener上使用JList。而是使用为任务构建的ListSelectionListener

这是我汇总的一个简短示例,然后才意识到您仅根据该技巧即可解决问题。所以我还是要发布它。 😉

java - 从列表中获取选定的对象-LMLPHP

import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;

public class FontSelector {

    FontSelector() {
        JPanel fontSelectorPanel = new JPanel(new BorderLayout(4, 4));
        GraphicsEnvironment ge = GraphicsEnvironment.
                getLocalGraphicsEnvironment();
        String[] fonts = ge.getAvailableFontFamilyNames();
        final JList fontList = new JList(fonts);
        fontSelectorPanel.add(new JScrollPane(fontList));
        fontList.setCellRenderer(new FontCellRenderer());
        fontList.setVisibleRowCount(10);

        final JTextArea textArea = new JTextArea(
                "The quick brown fox jumps over the lazy dog.", 3, 20);
        fontSelectorPanel.add(new JScrollPane(
                textArea), BorderLayout.PAGE_END);
        textArea.setEditable(false);
        textArea.setWrapStyleWord(true);
        textArea.setLineWrap(true);

        ListSelectionListener fontListener = (ListSelectionEvent e) -> {
            String fontName = fontList.getSelectedValue().toString();
            textArea.setFont(new Font(fontName, Font.PLAIN, 50));
        };
        fontList.addListSelectionListener(fontListener);
        fontList.setSelectedIndex(0);
        JOptionPane.showMessageDialog(null, fontSelectorPanel);
    }

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

class FontCellRenderer extends DefaultListCellRenderer {

    @Override
    public Component getListCellRendererComponent(
            JList list,
            Object value,
            int index,
            boolean isSelected,
            boolean cellHasFocus) {
        JLabel label = (JLabel) super.getListCellRendererComponent(
                list, value, index, isSelected, cellHasFocus);
        Font font = new Font((String) value, Font.PLAIN, 20);
        label.setFont(font);
        return label;
    }
}

10-06 16:19