我正在尝试使用单击的事件获取在 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/