int count = jTable.getSelectedRow();String name = jTable.getValueAt(count, 1).toString();这两行代码执行后为什么显示Index -1 out of bounds for length 11
时间: 2023-07-16 21:12:47 浏览: 95
这个错误的原因是在执行`jTable.getSelectedRow()`方法时,返回的行数为-1,表示没有选中任何一行。因此,当你尝试使用该行数来获取表格的值时,就会出现数组越界的错误。
要解决这个问题,你需要确保在调用`jTable.getSelectedRow()`方法之前,确实已经选中了一行。你可以使用`jTable.getSelectionModel().isSelectionEmpty()`方法来检查是否有行被选中。例如,你可以这样修改代码:
```
int count = jTable.getSelectedRow();
if (count == -1) {
// 没有选中任何一行
return;
}
String name = jTable.getValueAt(count, 1).toString();
```
这样,如果没有选中任何一行,程序就会直接返回,避免出现数组越界的错误。
相关问题
else if (source == jbl3) { initDelete(); } } private void initDelete() { // 检查是否有选中行 int selectedRow = jTable.getSelectedRow(); if (selectedRow == -1) { JOptionPane.showMessageDialog(null, "请先选择要删除的行"); return; } // 获取选中行的值 String valueAt = (String) tableModel.getValueAt(selectedRow, 0).toString(); if (valueAt == null) { JOptionPane.showMessageDialog(null, "无法获取选中行的值"); return; } conn = JDBCUtils.getConnection(); String sql = "DELETE from student where sid = ?"; try { pSmt = conn.prepareStatement(sql); pSmt.setString(1, valueAt); if (pSmt.executeUpdate() > 0) { tableModel.removeRow(selectedRow); initTable(); } else { JOptionPane.showMessageDialog(null, "删除失败"); } } catch (SQLException ex) { throw new RuntimeException(ex); } finally { JDBCUtils.close(pSmt, conn); } }
以上代码是一个删除JTable中选中行的方法,但是在获取选中行的值时存在问题。您可以尝试按照以下方法进行修改:
1. 将以下代码:
String valueAt = (String) tableModel.getValueAt(selectedRow, 0).toString();
修改为:
String valueAt = tableModel.getValueAt(selectedRow, 0).toString();
2. 您可以在获取选中行的值之前,先使用以下代码打印一下选中行的值:
System.out.println("选中行的值为:"+valueAt);
这样可以帮助您确定是否成功获取到了选中行的值。
希望这些建议可以帮助您解决问题,如果您有其他问题,请随时向我提出。
import java.awt.event.*; import java.awt.*; import javax.swing.*; import javax.swing.table.DefaultTableModel; public class MyTableWin extends JFrame implements ActionListener { Object rows[][] = { { "001", "zhang", "03/04/2002", "Computer" }, { "002", "Li", "05/10/2002", "Chinese" }, { "003", "Wang", "09/10/2002", "English" } }; String cols[] = { "number", "name", "birthday", "department" }; JTable table; JLabel lbl_show; JTextField txt_show; JButton btn_update; JPanel pSouth, pNorth; JScrollPane jp; public MyTableWin() { table = new JTable(rows, cols); // 表格里点谁就显示谁 table.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { int row = table.getSelectedRow(); int column = table.getSelectedColumn(); Object selectedvalue = table.getModel().getValueAt(row, column); txt_show.setText((String) selectedvalue); btn_update.setEnabled(true); } }); lbl_show = new JLabel("Info."); txt_show = new JTextField(15); btn_update = new JButton("Update"); btn_update.setEnabled(false); btn_update.addActionListener(this); pSouth = new JPanel(); pNorth = new JPanel(); jp = new JScrollPane(table); pNorth.add(jp); pSouth.add(lbl_show); pSouth.add(txt_show); pSouth.add(btn_update); add(pNorth, BorderLayout.CENTER); add(pSouth, BorderLayout.SOUTH); setVisible(true); setSize(800, 500); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public void actionPerformed(ActionEvent e) { int row = table.getSelectedRow(); int column = table.getSelectedColumn(); rows[row][column] = txt_show.getText(); int option = JOptionPane.showConfirmDialog(this, "do you confirm to update the table content?", "warning", JOptionPane.OK_CANCEL_OPTION); if (option == JOptionPane.OK_OPTION) { table.setModel(new DefaultTableModel(rows, cols)); } btn_update.setEnabled(false); } public static void main(String[] args) { MyTableWin win = new MyTableWin(); } }修改该程序,使得点击表格时,在控件台显示所在行一行的数据。
可以在鼠标点击事件中获取所在行的数据,然后显示在控件台上。修改代码如下:
```
table.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
int row = table.getSelectedRow();
Object[] rowData = new Object[cols.length];
for (int i = 0; i < cols.length; i++) {
rowData[i] = table.getModel().getValueAt(row, i);
}
String rowInfo = "Row " + (row + 1) + ": " + Arrays.toString(rowData);
txt_show.setText(rowInfo);
btn_update.setEnabled(true);
}
});
```
这样修改后,点击表格时就可以在控件台中显示所在行一行的数据了。
阅读全文