DefaultListModelオブジェクトによって追加されたJList要素にリスナーイベントを追加する方法
-
21-12-2019 - |
質問
私は2 JLIST 'addgrouplist'と 'addapklist'を作成しました。model.addelementを使用してAddGroupListに要素を追加しています(ArrayList1.get(ArrayList1.size() - 1))。そのことは、addGrouplistの選択された値に基づいてaddApklistを更新したいです。これについては、リスト項目が選択されているがイベントがティルリングではないように、イベントリスナーを追加しようとしています。 これを達成するために何をしますか? 以下は私が使用しているコードです。
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);
.
このようにしてJListを定義しました。 次に、addgrouplist
に要素を追加しましたmodel1.addElement(arrayList1.get(arrayList1.size()-1));
.
そして次のように私はそれにリスナーを追加しました。
addGroupList.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent lse) {
if (!lse.getValueIsAdjusting()) {
System.out.println("Selection trigerred");
}
}
});
.
このコードでは何も変わっていないようです。私は何をしていますか? 私はまた次の
を試してみました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.
}
});
. 解決
次の方法で、addgrouplist
に要素を追加しました.model1.addElement(arrayList1.get(arrayList1.size()-1));
いいえあなたはしていません。model1
はaddApkList
のListモデルではなく、addGroupList
:
addApkList = new JList(model1);
.
model2.addElement(arrayList1.get(arrayList1.size()-1))
です。
いずれにせよ私はあなたがあなたが期待している疑いが疑われる疑いがあるhttp://docs.oracle.com/javase/7/docs/api/javax/swing/event/listSelectionEvent.html "rel="NOFOLLOW "> ListSelectionEvent は、リストモデルにアイテムを追加するだけで解凍されています。それは起こらないでしょう。追加されたアイテムを選択したものとして設定する必要があります。
Object item = arrayList1.get(arrayList1.size()-1);
model2.addElement(item);
addGroupList.setSelectedValue(item, true);
.
他のヒント
私は2 JLIST 'addgrouplist'と 'addapklist'を作成しました。私は追加しています AddFruplistを使用して要素 model.addelement(ArrayList1.get(ArrayList1.size() - 1))。物事はIです 選択したAddGrouplistの値に基づいてaddApklistを更新したいです。にとって これは、私が行動できるようにイベントリスナーを追加しようとしています リスト項目が選択されているときに何かイベントはTrigigerringではありません。 これを達成するために何をしますか?以下は私が使用しているコードです。
例えば
です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);
}
});
}
}
.