J'ai un JList
, où j'affiche des identifiants. Je veux capturer l'ID sur lequel l'utilisateur a cliqué et l'afficher sur un JLabel
.
String selected = jlist.getSelectedItem().toString();
Le code ci-dessus me donne la valeur JList
sélectionnée. Mais ce code doit être placé dans un événement de bouton, où lorsque je clique sur le bouton, il obtiendra la valeur JList et l'affectera au JLabel
.
Mais ce que je veux faire, c'est que dès que l'utilisateur clique sur un élément du JList
pour mettre à jour le JLabel
en temps réel. (sans avoir à cliquer sur les boutons pour déclencher une action)
Un exemple simple serait comme ci-dessous en utilisant listselectionlistener
import Java.awt.Dimension;
import Java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class JListDemo extends JFrame {
public JListDemo() {
setSize(new Dimension(300, 300));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new FlowLayout());
final JLabel label = new JLabel("Update");
String[] data = { "one", "two", "three", "four" };
final JList dataList = new JList(data);
dataList.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent arg0) {
if (!arg0.getValueIsAdjusting()) {
label.setText(dataList.getSelectedValue().toString());
}
}
});
add(dataList);
add(label);
setVisible(true);
}
public static void main(String args[]) {
new JListDemo();
}
}
Pourquoi ne mettez-vous pas un ListSelectionListener
sur votre JList
et y ajoutez votre code ci-dessus.
Je suppose que vous savez déjà comment créer des écouteurs sur JButtons, en fonction de votre question, il vous suffit donc de l'ajuster pour créer un ListSelectionListener
à la place, puis d'affecter l'écouteur à votre JList
à l'aide de jlist.addListSelectionListener(myListener);
Il y a un joli tutoriel ici qui devrait vous aider à démarrer, ou reportez-vous à la documentation
Vous devriez viser quelque chose comme ça ...
jlist.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent event) {
if (!event.getValueIsAdjusting()){
JList source = (JList)event.getSource();
String selected = source.getSelectedValue().toString();
}
}
});
Utilisez un ListSelectionListener
:
JList list = new JList(...);
list.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent evt) {
if (!evt.getValueIsAdjusting()) {
// code here
}
}
});