这是我第一次使用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
。
这是我汇总的一个简短示例,然后才意识到您仅根据该技巧即可解决问题。所以我还是要发布它。 😉
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;
}
}