2015-06-14 2 views
0

После проведения большого количества исследований я все еще не могу получить элементы из выбранного нескольких строк jlist. Вот мой код ListSelectionListener:Невозможно получить каждый элемент из выбранной строки Jlist?

list.addListSelectionListener(new ListSelectionListener() { 
     public void valueChanged(ListSelectionEvent e) { 
      ListModel model = list.getModel(); 

      for(int i=0; i < model.getSize(); i++){ 
       System.out.println(model.getElementAt(i)); 
      } 
     } 
    }); 

Я также добавил кнопку, чтобы распечатать выбранные элементы:

btnNewButton.addMouseListener(new MouseAdapter() { 
     @Override 
     public void mouseClicked(MouseEvent e) { 
      ListModel model = list.getModel(); 

      for(int i=0; i < model.getSize(); i++){ 
       System.out.println(model.getElementAt(i)); 
      } 
     } 
    }); 

, но по-прежнему получать тот же результат:

[email protected] 
[email protected] 
[email protected] 
[email protected] 

Я ожидаю выход "Имя: Paul0 Возраст: 0" Я также попытался добавить DefaultlistModel вместо ListModel, но результат тот же. Помогите, пожалуйста, каждый элемент внутри выбранной строки. Я использую JDK8. Ниже приведен полный рабочий код.

import java.awt.Component; 

    import javax.swing.DefaultListCellRenderer; 
    import javax.swing.DefaultListModel; 
    import javax.swing.JFrame; 
    import javax.swing.JList; 
    import javax.swing.ListModel; 
    import javax.swing.SwingUtilities; 
    import javax.swing.JButton; 

    import java.awt.BorderLayout; 

    import javax.swing.event.ListSelectionListener; 
    import javax.swing.event.ListSelectionEvent; 
    import java.awt.event.MouseAdapter; 
    import java.awt.event.MouseEvent; 


public class Test3 { 

JList<Student> list; 
DefaultListModel model; 

public Test3() { 
    list = new JList(); 
    list.addListSelectionListener(new ListSelectionListener() { 
     public void valueChanged(ListSelectionEvent e) { 
      ListModel model = list.getModel(); 

      for(int i=0; i < model.getSize(); i++){ 
       System.out.println(model.getElementAt(i)); 
      } 
     } 
    }); 
    model = new DefaultListModel(); 
    for (int i = 0; i < 10; i++) { 
     model.addElement(new Student("Paul" + i, i)); 
    } 
    list.setModel(model); 
    list.setCellRenderer(new MyListCellRenderer()); 

    JFrame frame = new JFrame("Test"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.getContentPane().add(list); 

    JButton btnNewButton = new JButton("Print"); 
    btnNewButton.addMouseListener(new MouseAdapter() { 
     @Override 
     public void mouseClicked(MouseEvent e) { 
      ListModel model = list.getModel(); 

      for(int i=0; i < model.getSize(); i++){ 
       System.out.println(model.getElementAt(i)); 
      } 
     } 
    }); 
    frame.getContentPane().add(btnNewButton, BorderLayout.NORTH); 
    frame.pack(); 
    frame.setVisible(true); 
} 

public static void main(String[] args) { 
    SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      new Test3(); 
     } 
    }); 
} 

private class MyListCellRenderer extends DefaultListCellRenderer { 

    @Override 
    public Component getListCellRendererComponent(
      JList list, Object value, int index, 
      boolean isSelected, boolean cellHasFocus) { 
     super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); 
     Student label = (Student) value; 
     String name = label.getName(); 
     int age = label.getAge(); 
     String labelText = "<html>Name: " + name + "<br/>Age: " + age; 
     setText(labelText); 

     return this; 
    } 

    } 
} 

class Student { 
    String name; 
    int age; 
    public Student(String name, int age) { 
     this.name = name; 
     this.age = age; 
    } 
    public String getName() { return name; } 
    public int getAge() { return age; } 
} 
+0

Ваш класс 'Student' не переопределяет метод' toSring', поэтому он печатает результат по умолчанию 'toString', который является вашим выходом. Это означает, что вы работаете с кодом, congradulations – MadProgrammer

ответ

1

getElementAt возвращается в Object в указанное положение, которое случается в вашем случае Student. System.out.println использует метод объекта toString для печати объекта, поэтому, исходя из вашего кода, он работает.

Но, если вы хотите, чтобы вывод "Name: Paul0 Age: 0.", вам необходимо изменить Student класс и переопределить метод toString, чтобы удовлетворить ваши требования

class Student { 
    String name; 
    int age; 
    public Student(String name, int age) { 
     this.name = name; 
     this.age = age; 
    } 
    public String getName() { return name; } 
    public int getAge() { return age; } 
    public String toString() { 
     return "Name: " + getName() + " Age: " + getAge()); 
    } 
} 

Или что-то подобное

Вы также можете посмотрите JList#getSelectedValuesList, чтобы получить List из элементов, которые выбрал пользователь (но, возможно, вы ошибаетесь в своем вопросе)

Вы также можете взглянуть на Object as a Superclass (смотрите раздел «Метод toString()») для получения более подробной информации.

+0

Спасибо за его работу ...... –