【问题标题】:Array out of bounds when getting column and row selection?获取列和行选择时数组超出范围?
【发布时间】:2018-07-13 18:26:14
【问题描述】:

我正在尝试使用单击事件在 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);

我尝试将 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();
        }
    });

【问题讨论】:

    标签: java sql arrays jtable


    【解决方案1】:

    查看 JTable 的 JavaDocs,如果未选择任何行,则 JTable.getSelectedRow() 方法返回 -1。

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-10-31
      • 2017-07-03
      • 1970-01-01
      • 1970-01-01
      • 2017-04-27
      • 1970-01-01
      • 2012-02-25
      • 1970-01-01
      相关资源
      最近更新 更多