当前位置: 首页 > 知识库问答 >
问题:

JList的getSelectedIndex()即使选择了一个项,也总是返回-1

蓝鸿哲
2023-03-14

http://prntscr.com/9jhrwa“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);       
}
    listModel=new DefaultListModel();
    list_konto.setModel(listModel);
    konto=new Konto[4];
    konto[0]=new Konto("10000/20000", "Test konto primer1");
    konto[1]=new Konto("20000/30000", "Test konto primer2");
    konto[2]=new Konto("50000/60000", "Test konto primer3");
    konto[3]=new Konto("30000/50000", "Test konto primer4");
    for (int i = 0; i < konto.length; i++) {
        listModel.addElement(konto[i].getID()+" | "+konto[i].getOpis());
    }

    list_konto=new JList(listModel);
    jScrollPane1.repaint();    
}

在这里,我显示了按下这个按钮时的jScrollPanel,我还显示了如果我想在显示的JList中获得选定元素的索引时必须按下的按钮

   private void button_prikaziKontoActionPerformed(java.awt.event.ActionEvent evt) {                                                    
    jScrollPane1.setVisible(true);
    button_potrdiKonto.setVisible(true);
    //revalidate();
    //repaint();
}                

在这里,我按下一个按钮,它应该为我提供所选项的索引,但它一直给我-1,无论JList上的项是否被选中都无关紧要

private void button_potrdiKontoActionPerformed(java.awt.event.ActionEvent evt) {                                                   
    //indexKonta=list_konto.getSelectedIndex();
    text_opisKonta.setText(Integer.toString(list_konto.getSelectedIndex()));
}  

共有1个答案

艾奕
2023-03-14

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

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);
        });
    }
}
 类似资料:
  • 问题内容: 我有这种简单的查询,它返回给定id的非空整数字段: 问题是,如果找不到ID,则结果集为空。我需要查询始终返回一个值,即使没有结果也是如此。 我有这个东西工作,但我不喜欢它,因为它运行相同子查询的2倍: 如果该行存在,则返回field1,否则返回0。有什么改进的方法吗? 谢谢! 编辑以下一些评论和答案 :是的,它必须在 单个查询语句中, 并且我不能使用count技巧,因为 我只需要返回1

  • 我制作了一个带有阻塞套接字的小型套接字echo服务器(请参见下面的代码),但是select语句始终返回0,即使有消息要读取。其他的都管用。如果通过简单地将1赋给来替换select语句,则服务器可以工作。 服务器在虚拟机中运行在Ubuntu上,而客户端在主机系统上(Windows7 professional)。我的服务器IDE是Eclipse3.8,它使用OpenSSL1.0.1j。 要让这段代码工

  • 问题内容: 我需要为JTree使用自定义单元格渲染器,以便在每个单元格上添加一些JLabel。然后允许用户单击这些标签,而无需先选择单元格。 因此,我创建了一个Renderer,它返回一个包含DefaultTreeCellRenderer和2 JLabel的JPanel。 然后,我创建了编辑器,以允许用户通过MouseListener来单击这些标签。一切工作正常,除了用户必须在单击标签之前选择单元

  • 我最近参加了一个新项目。在这个项目中,所有正在使用的API总是返回状态代码200。即使响应应该是400或404,API也会返回状态代码200。 我问API为什么不返回其他响应代码,程序员告诉我他们不使用响应代码。他们把信息放在身体里。 例如,缺少一些必填字段,它们返回响应状态代码200,但正文返回如下 如果未经授权的用户试图访问,状态代码为200,身体像这样返回 我以前做的是非常不同的,我总是通过

  • 问题内容: 我正在根据日期范围进行计数。当前查询确实返回正确的结果,但我需要其他信息。在当前形式下,查询将显示具有正确计数的项目。但是,我需要显示所有项目,即使在指定的日期范围内它们的计数为零。 这是SQL代码: 当我执行此查询时,我得到以下结果: https://dl.dropbox.com/u/17234826/SQLresult.png 这个结果是正确的,但是即使创建范围中没有需求,我也需要

  • 我试图通过springboot项目探索Spring致动器endpoint。我无法暴露任何endpoint。它总是在日志中显示“在基本路径/执行器下暴露1个endpoint”。下面是我在build.gradle和application.yml文件中添加的依赖细节。我也使用了spring security,只向具有特定角色的用户公开endpoint。但是仍然没有效果。请求建议。 build.gradl