Como adicionar evento de ouvinte aos elementos JList que são adicionados pelo objeto DefaultListModel?
-
21-12-2019 - |
Pergunta
Eu criei 2 JLists 'addGroupList' e 'addApkList'.Estou adicionando elementos a addGroupList usando model.addElement(arrayList1.get(arrayList1.size()-1));o problema é que quero atualizar addApkList com base no valor selecionado de addGroupList.Para isso, estou tentando adicionar um ouvinte de evento para poder agir de acordo com algo quando o item da lista for selecionado, mas o evento não estiver sendo acionado.O que eu faço para conseguir isso?a seguir está o código que estou usando.
model1 = new DefaultListModel();
model2 = new DefaultListModel();
addApkList = new JList(model1);
addGroupList = new JList(model2);
scrollPane1 = new JScrollPane();
scrollPane1.setViewportView(addApkList);
scrollPane2 = new JScrollPane();
scrollPane2.setViewportView(addGroupList);
desta forma eu defini JList.da seguinte maneira, adicionei elementos a addGroupList
model1.addElement(arrayList1.get(arrayList1.size()-1));
e da seguinte maneira adicionei um ouvinte a ele.
addGroupList.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent lse) {
if (!lse.getValueIsAdjusting()) {
System.out.println("Selection trigerred");
}
}
});
Parece não acontecer nenhuma mudança com este código.o que estou fazendo de errado?Eu também tentei seguir
model1.addListDataListener(new ListDataListener() {
@Override
public void intervalAdded(ListDataEvent lde) {
System.out.println("ddddddddddd");
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void intervalRemoved(ListDataEvent lde) {
System.out.println("ddddddddddd");
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void contentsChanged(ListDataEvent lde) {
System.out.println("ddddddddddd");
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
});
Solução
Da seguinte maneira, adicionei elementos a addGroupList
model1.addElement(arrayList1.get(arrayList1.size()-1));
Não, você não fez isso. model1
é o modelo de lista para addApkList
não addGroupList
:
addApkList = new JList(model1);
Deveria ser model2.addElement(arrayList1.get(arrayList1.size()-1))
.
De qualquer forma, suspeito que você esteja esperando por um ListSelectionEvent sendo disparado quando você simplesmente adiciona um item ao modelo de lista.Isso não vai acontecer.Você precisa definir o item adicionado como selecionado:
Object item = arrayList1.get(arrayList1.size()-1);
model2.addElement(item);
addGroupList.setSelectedValue(item, true);
Dê uma olhada para JList.setSelectedValue (Objeto e Objeto, booleano deveriaScroll) para mais detalhes.
Outras dicas
Eu criei 2 JLists 'addGroupList' e 'addApkList'.Estou adicionando elementos ao addGrouplist usando o Model.adDelement (ArrayList1.get (ArrayList1.size ()-1));O problema é que eu quero atualizar o ADDAPKLIST com base no valor selecionado do addGrouplist.Para isso, estou tentando adicionar ouvinte de eventos para que eu possa agir sobre algo quando o item da lista é selecionado, mas o evento não é desencadeador.O que eu faço para conseguir isso?a seguir está o código que estou usando.
por exemplo
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class Testing extends JFrame {
private static final long serialVersionUID = 1L;
private DefaultListModel listModel = new DefaultListModel();
private DefaultListModel listModelEmpty = new DefaultListModel();
private JList list = new JList(listModel);
private JList listEmpty = new JList(listModelEmpty);
private JPanel panel = new JPanel(new GridLayout(1, 1));
private int currentSelectedRow = 0;
private int xX = 0;
public Testing() {
setLocation(400, 300);
setDefaultCloseOperation(EXIT_ON_CLOSE);
for (int x = 0; x < 9; x++) {
listModel.addElement("" + x);
xX++;
}
JScrollPane sp = new JScrollPane(list);
list.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent lse) {
if (!lse.getValueIsAdjusting()) {
System.out.println("Selection trigerred");
}
}
});
JScrollPane spEmpty = new JScrollPane(listEmpty);
panel.add(spEmpty);
panel.add(sp);
add(panel, BorderLayout.CENTER);
JButton btn1 = new JButton("Reset Model CastingModel");
add(btn1, BorderLayout.NORTH);
btn1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
//list.clearSelection();
DefaultListModel model = (DefaultListModel) list.getModel();
model.removeAllElements();
for (int x = 0; x < 9; x++) {
model.addElement("" + (x + xX));
xX++;
}
list.setModel(model);
}
});
JButton btn2 = new JButton("Reset Model directly from Model");
add(btn2, BorderLayout.SOUTH);
btn2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
//list.clearSelection();
listModel.removeAllElements();
for (int x = 0; x < 9; x++) {
listModel.addElement("" + (x + xX));
xX++;
}
}
});
pack();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Testing().setVisible(true);
}
});
}
}