gpt4 book ai didi

java - 从其 ListSelectionModel 获取 JList 的方法

转载 作者:行者123 更新时间:2023-11-29 03:17:34 26 4
gpt4 key购买 nike

如果我们知道 ListSelectionModel,在 Java 中是否有获取 JList 的方法?下面的代码来 self 的 ListSelectionListener:

    ListSelectionModel lsm=(ListSelectionModel)event.getSource();

JList jl=lsm.someMethodIdLiketoKnow();

ListSelectionListener 添加到此 ListSelectionModel 中:

    myjlist.getSelectionModel().addListSelectionListener(myListSelectionListener);

另一个问题是为什么我不直接将监听器添加到 JList 而完全忘记 ListSelectionModel

最佳答案

不可能从给定的 ListSelectionModel 获得“the”JList,因为可能有多个列表具有相同 ListSelectionModel:

import java.awt.BorderLayout;
import java.awt.GridLayout;

import javax.swing.DefaultListModel;
import javax.swing.DefaultListSelectionModel;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ListSelectionModel;
import javax.swing.SwingUtilities;

public class SharedListSelectionModel
{
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
createAndShowGUI();
}
});
}

private static void createAndShowGUI()
{
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.getContentPane().setLayout(new BorderLayout());

DefaultListModel modelA = new DefaultListModel();
JList listA = new JList(modelA);
DefaultListModel modelB = new DefaultListModel();
JList listB = new JList(modelB);
for (int i=0; i<10; i++)
{
modelA.addElement("A"+i);
modelB.addElement("B"+i);
}

ListSelectionModel selectionModel = new DefaultListSelectionModel();
listA.setSelectionModel(selectionModel);
listB.setSelectionModel(selectionModel);

JPanel p = new JPanel(new GridLayout(1,2));
p.add(new JScrollPane(listA));
p.add(new JScrollPane(listB));
f.getContentPane().add(p, BorderLayout.CENTER);

f.setSize(300,300);
f.setLocationRelativeTo(null);
f.setVisible(true);
}
}

选择模型 本身就是一个模型(粗略地说,在 MVC pattern 的含义中)。但正如 icza 在他的回答中指出的那样:您还可以将选择监听器添加到 JList

另一种解决方案是您手动将监听器与列表相关联。通常,这可以在本地匿名内部类中完成:

// Declare list as "final" (or make it a field of the enclosing class)
final JList list = ...;
list.getSelectionModel().addListSelectionListener(new ListSelectionListener()
{
@Override
public void valueChanged(ListSelectionEvent e)
{
// Can access the list here:
Object object = list.getSelectedValue();
...
}
});

关于java - 从其 ListSelectionModel 获取 JList 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25620430/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com