Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JList的getSelectedIndex()始终返回-1,即使选择了项目_Java_Swing_Jscrollpane_Jlist - Fatal编程技术网

Java JList的getSelectedIndex()始终返回-1,即使选择了项目

Java JList的getSelectedIndex()始终返回-1,即使选择了项目,java,swing,jscrollpane,jlist,Java,Swing,Jscrollpane,Jlist,“GUI的外观” 公共类Okno1扩展了javax.swing.JFrame{ static Konto[]konto; static DefaultListModel listModel; static int indexKonta; public Okno1() { initComponents(); napolniKonto(); jScrollPane1.setVisible(false); button_potrdiKonto.setVisible(fa

“GUI的外观”

公共类Okno1扩展了javax.swing.JFrame{

static Konto[]konto;
static DefaultListModel listModel;
static int indexKonta;
public Okno1() {
    initComponents();
    napolniKonto();
    jScrollPane1.setVisible(false);
    button_potrdiKonto.setVisible(false);       
}
在这里,我用对象填充数组,并将它们添加到DefaultListModel,同时我还使用提到的DefaultListModel创建了一个新列表

在这里,我按下一个按钮,它应该会给我所选项目的索引,但它会一直给我-1,无论是否选择了JList上的项目


不清楚你的代码在哪里出错。这个竞争的例子可以让你孤立地研究这个问题。也可以考虑添加一个来查看效果。

myList.addListSelectionListener((ListSelectionEvent e) -> {
    myLabel.setText(getSelectionIndex());
});


不清楚你的代码在哪里出错。这个竞争的例子可以让你孤立地研究这个问题。也可以考虑添加一个来查看效果。

myList.addListSelectionListener((ListSelectionEvent e) -> {
    myLabel.setText(getSelectionIndex());
});

  • 不要使用静态变量

  • 始终测试
    if(list.getSelectedIndex()>-1){

  • 通过始终测试
    if(list.getSelectedIndex()>-1){

例如(不使用ListSelectionListener)

  • 不要使用静态变量

  • 始终测试
    if(list.getSelectedIndex()>-1){

  • 通过始终测试
    if(list.getSelectedIndex()>-1){

例如(不使用ListSelectionListener)


好的,答案是我初始化了我的列表2次(1次到多次),所以我只需要删除这一行:list_konto=new JList(listModel);好的,答案是我初始化了我的列表2次(1次到多次),所以我只需要删除这一行:list_konto=new JList(listModel);如果选择多行怎么办?如果选择多行怎么办?
private void button_potrdiKontoActionPerformed(java.awt.event.ActionEvent evt) {                                                   
    //indexKonta=list_konto.getSelectedIndex();
    text_opisKonta.setText(Integer.toString(list_konto.getSelectedIndex()));
}  
myList.addListSelectionListener((ListSelectionEvent e) -> {
    myLabel.setText(getSelectionIndex());
});
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.event.ListSelectionEvent;

/** @see http://stackoverflow.com/a/34497773/230513 */
public class Test extends JPanel {

    private final String[] values = {"Value1", "Value2", "Value3", "Value4"};
    private final JList myList = new JList(values);
    private final JLabel myLabel = new JLabel();

    public Test() {
        myList.setSelectedIndex(values.length - 1);
        myLabel.setText(getSelectionIndex());
        this.add(myList);
        this.add(myLabel);
        this.add(new JButton(new AbstractAction("Show Selected Index") {

            @Override
            public void actionPerformed(ActionEvent e) {
                myLabel.setText(getSelectionIndex());
            }
        }));
    }

    private String getSelectionIndex() {
        return String.valueOf(myList.getSelectedIndex());
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(() -> {
            JFrame f = new JFrame();
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.add(new Test());
            f.pack();
            f.setLocationByPlatform(true);
            f.setVisible(true);
        });
    }
}
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JScrollPane;

public class JListAndSelection {

    private JFrame frame = new JFrame();
    private DefaultListModel listModel = new DefaultListModel();
    private JList list = new JList(listModel);
    private JScrollPane scrollPane = new JScrollPane(list);
    private JLabel label = new JLabel("nothing is selected");
    private JButton button1 = new JButton("print me selected value");

    public JListAndSelection() {
        button1.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent ae) {
                if (list.getSelectedIndex() > -1) {
                    label.setText((String) list.getSelectedValue());
                } else {
                    label.setText("nothing is selected");
                }
            }
        });

        listModel.addElement("10000/20000 - Test konto primer1");
        listModel.addElement("20000/30000 - Test konto primer2");
        listModel.addElement("50000/60000 - Test konto primer3");
        listModel.addElement("30000/50000 - Test konto primer4");

        list.setVisibleRowCount(5);

        frame.setTitle("JFrame");
        frame.add(label, BorderLayout.NORTH);
        frame.add(scrollPane, BorderLayout.CENTER);
        frame.add(button1, BorderLayout.SOUTH);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocation(150, 150);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(() -> {
            new JListAndSelection();
        });
    }
}