gpt4 book ai didi

java - valueChanged 操作中的 JList NullPointerException

转载 作者:行者123 更新时间:2023-12-01 11:51:29 26 4
gpt4 key购买 nike

这是我的第一个 JList:

JPanel classe = new JPanel();
class_list = new JList();
class_list.addListSelectionListener(this);
JScrollPane classeScrollPane = new JScrollPane(class_list);
classeScrollPane.setPreferredSize(new Dimension(175,405));
classe.setBorder(new TitledBorder("Classes"));
classe.add(classeScrollPane);

这是第二个:

JPanel relation = new JPanel();
relation_list = new JList();
relation_list.addListSelectionListener(this);
JScrollPane relationScrollPane = new JScrollPane(relation_list);
relationScrollPane.setPreferredSize(new Dimension(220,130));
relation.setBorder(new TitledBorder("Relations"));
relation.add(relationScrollPane);

这是我的 valueChanged 操作:

    public void valueChanged(ListSelectionEvent e){
JList source = (JList) e.getSource();
String value = (String)source.getSelectedValue();
if (value.length() > 0){
if (source == class_list){
//if(!relation_list.isSelectionEmpty()) relation_list.clearSelection();
Class_object co = declaration.getClass(value);
attribut_list.setListData(co.getAttributes().toArray());
operation_list.setListData(co.getOperations().toArray());
if(declaration.getGeneralization(value) !=null){
subClass_list.setListData(declaration.getGeneralization(value).getSubClasses().toArray());
}
//clear JList if there is no correspondent subclass
else subClass_list.setListData(new String[2]);
//add relation content to relation panel
DefaultListModel model = new DefaultListModel();
related_association = declaration.getAssociation(value);
for(Association asso : related_association){
model.addElement("(R)"+asso.getName());
}
related_aggregation = declaration.getAggregation(value);
for(Aggregation agg : related_aggregation){
model.addElement("(A)"+agg.getName());
}
relation_list.setModel(model);
}
if (source == relation_list){
int focused_list = source.getSelectedIndex();
if(focused_list < related_association.size()){
details.setText(related_association.get(focused_list).toString());
}
else {
details.setText(related_aggregation.get(focused_list-related_association.size()).toString());
}
}
}
}

基本上,当我们单击第一个 JList 中的项目时,它会在第二个 JList 中显示一些内容(例如该项目的变量名称)。然后我们单击第二个 JList 中的项目,它会在 JTextArea 中显示有关该项目的更多信息。因此,您必须单击第一个 jlist 以显示第二个 jlist,然后单击第二个 jlist 以显示详细信息。问题是,在单击第一个 jlist 和第二个 jlist 后,单击第一个 JList 中的另一个项目,行“

中出现 NullPointerException

if (value.length() > 0){

我知道发生错误是因为变量值为null,但我不知道为什么value为null。谁能告诉我我的代码有什么问题。非常感谢。

最佳答案

在选择更改期间,当前选定的项目被“取消选择”,这意味着,暂时没有选择任何内容,ListSelectionListener 会收到此更改的通知,这就是您的 null 值来自。

然后选择更改为新选择的项目,并再次通知 ListSelecitonListener

您可以通过使用ListSelectionEvent#getValueIsAdjusting来测试这一点

第二次选择值时出现这种情况是因为没有发生取消选择事件通知,只有选择事件...

关于java - valueChanged 操作中的 JList NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28792622/

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