java - 获取列和行选择时数组越界?

标签 java sql arrays jtable

我正在尝试使用单击的事件获取在 JTable 上选择的列和行,但它告诉我这个 - “java.lang.ArrayIndexOutOfBoundsException:-1”

这是我的 JTable:

DefaultTableModel tabelaPrs = new DefaultTableModel (null, new String[] {"DATA","EXERCICIO","PESO","NÚMERO DE REPETIÇÕES"});
JTable jtPrs = new JTable(tabelaPrs);
jtPrs.setEnabled(false);
JScrollPane jspPrs= new JScrollPane(jtPrs);
jspPrs.setEnabled(false);
jspPrs.setBounds(55,88,639,567);
jspPrs.setPreferredSize(new Dimension(475,125));
contentPane.add(jspPrs);

我的 try catch 将来自 sql 的数据提供给 JTable:

try
{
    java.sql.Statement stmt;
    ResultSet rs;
    String sql = "SELECT * FROM prs ORDER BY data";
    int i = 0;
    String [] campos = new String [] {null, null, null,null};

    LigacaoBD obterLigacao = new LigacaoBD();
    Connection con = (Connection) obterLigacao.OL();

    stmt = con.createStatement();
    rs = stmt.executeQuery(sql);

    while (rs.next())
    {
        tabelaPrs.addRow(campos);
        tabelaPrs.setValueAt(rs.getString("data"), i, 0);
        tabelaPrs.setValueAt(rs.getString("exercicio"), i, 1);
        tabelaPrs.setValueAt(rs.getString("peso"), i, 2);
        tabelaPrs.setValueAt(rs.getString("num_reps"), i,3);
        i++;
    }
    obterLigacao.FecharLigacao(con);
}
catch (SQLException sqle)
{
    JOptionPane.showMessageDialog(null, "Não foi possivel efetuar a operação na BD." + sqle.getMessage());
}

这是我的鼠标点击事件:

jtPrs.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent e) {

            int r = jtPrs.getSelectedRow();

            getData = tabelaPrs.getValueAt(r, 1).toString();
            getExercicio = tabelaPrs.getValueAt(r, 2).toString();
            getPeso = tabelaPrs.getValueAt(r, 3).toString();
            getRepetições = tabelaPrs.getValueAt(r, 4).toString();
        }
    });

最佳答案

查看 JavaDocs对于 JTable,如果没有选择行,方法 JTable.getSelectedRow() 返回 -1。

int r = jtPrs.getSelectedRow(); getData = tabelaPrs.getValueAt(r, 1).toString();

然后您尝试将检索到的值与 JTable 一起使用,这可能会导致 ArrayOutOfBoundsException。

显而易见的解决方案是确保在调用该事件时选择了一行,这样就不会返回 -1。参见 this有关选择行的一些详细信息。

关于java - 获取列和行选择时数组越界?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51330958/

相关文章:

arrays - 64 位 NASM - 检索 2D 数组的元素

c# - 数组内存不足异常

数组查找中的 PHP 未定义索引

java - 在页面中心对齐段落

java - 如何从 DB2 获取描述性错误消息?

java - 使用 Android Studio 格式化 JAVA 中的字符串

java.sql.SQLNonTransientConnectionException :Keyspace names must be composed of alphanumerics and underscores (parsed: '' )

用于查找组中最新记录的sql

sql - 在不损失精度的情况下将 SQL Geography Lat/Long 转换为 VARCHAR

mysql - 使用外键创建sql表错误编号:150