简体   繁体   English

无法从选定的多行Jlist中获取每个项目?

[英]Unable to get each item from selected multiple line Jlist?

After doing lots of research i am still unable to get items from selected multiple line jlist. 经过大量研究后,我仍然无法从选定的多行jlist中获取项目。 Here is my code for listSelectionListener: 这是我的listSelectionListener代码:

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));  
            }
        }
    });

I also added a button to print the selected items: 我还添加了一个按钮来打印所选项目:

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));  
            }
        }
    });

but Still getting the same output : 但仍然得到相同的输出:

com.example.main.Student@c36b5fb
com.example.main.Student@2e61eb2
com.example.main.Student@151f708e
com.example.main.Student@563e55b0

I am expecting output "Name: Paul0 Age: 0." 我期望输出“名称:Paul0年龄:0。” I also tried adding DefaultlistModel instead of ListModel but the output is same. 我也尝试添加DefaultlistModel而不是ListModel,但是输出是相同的。 Please help I want each item inside selected line.I am using JDK8. 请帮助我让每个项目都在所选行中。我正在使用JDK8。 Below is complete working code. 以下是完整的工作代码。

    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; }
}

getElementAt is returning the Object at the specified position, which happens to be a Student in your case. getElementAt返回指定位置的Object ,在您的情况下恰好是Student System.out.println is using the object's toString method to print the object, so, based on your code, it seems to be working. System.out.println正在使用对象的toString方法来打印对象,因此,根据您的代码,它似乎正在工作。

But, if you want the output of "Name: Paul0 Age: 0." 但是,如果要输出"Name: Paul0 Age: 0." , you need to change the Student class and override the toString method to meet your requirements ,您需要更改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());
    }
}

Or something like that 或类似的东西

You might also want to take a look at JList#getSelectedValuesList to get a List of the items that the user has selected (but I might be misinterrupting your question) 您可能还想看看JList#getSelectedValuesList以获得用户选择的项目的List (但我可能会打扰您的问题)

You could also have a look at Object as a Superclass (look for the section called "The toString() Method") for more details 您还可以查看作为超类的对象 (请参见“ toString()方法”一节),以了解更多详细信息。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM