关于java中JTable中的错误。下面是出错的代码问题。第一次在Jtable中点击一条记录时没,当第二次点击时报

public void creat(){
content.removeAllElements();
sql="select * from newsinfo";
JavaBean bean=new JavaBean();
ResultSet set=bean.execquery(sql);
try {
while(set.next()){
Vector item=new Vector(1,1);
item.add(set.getString("news_id"));
item.add(set.getString("news_name"));
item.add(set.getString("news_type"));
item.add(set.getString("news_publisher"));
item.add(set.getFloat("news_price"));
content.add(item);
}
} catch (SQLException e) {

e.printStackTrace();
}
finally{
bean.closestmt();
bean.closeconn();
}
dtm=new DefaultTableModel(content,columnnames){
public boolean isCellEditable(int row, int column) {
return false;
}

};
table=new JTable(dtm);
table.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e){
i=table.getSelectedRow();
newsid=(String)table.getValueAt(i,0);
newsname=(String)table.getValueAt(i,1);
newstype=(String)table.getValueAt(i, 2);
publisher=(String)table.getValueAt(i, 3);
price=(Float)table.getValueAt(i, 4);
jtf1.setText(newsid);jtf2.setText(newsname);jtf3.setText(newstype);
jtf4.setText(publisher);jtf5.setText(String.valueOf(price));
}
} );
jscroll=new JScrollPane(table);
jscroll.setPreferredSize(new Dimension(200,200));
this.add(jscroll,BorderLayout.NORTH);
this.setVisible(true);
}
public void showframe(){

this.setSize(500,500);
this.setResizable(false);
int w = (Toolkit.getDefaultToolkit().getScreenSize().width - this.getWidth()) / 2;
int h = (Toolkit.getDefaultToolkit().getScreenSize().height - this.getHeight()) / 2;
this.setLocation(w, h);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
public void actionPerformed(ActionEvent e) {
String str=e.getActionCommand();
if("修改".equals(str)){
if(i>=0){
newsname=jtf2.getText().trim();
newstype=jtf3.getText().trim();
publisher=jtf4.getText().trim();
price=Float.parseFloat(jtf5.getText().trim());
sql="update newsinfo set news_name='"+newsname+"',news_type='"+newstype+"',news_publisher='"+publisher+"',news_price='"+price+"' where news_id='"+newsid+"'";
JavaBean bean=new JavaBean();
bean.execupdate(sql);
JOptionPane.showMessageDialog(this, "数据修改成功");
bean.closeconn();
bean.closestmt();
creat();
}
else{
JOptionPane.showMessageDialog(this, "你还未选择要修改的记录");
}

}

}

public static void main(String[] args) {
Modifynews test=new Modifynews();
test.creat();
test.showframe();
}

}
无语了,发不完啊,搞了我差不多两个小时。我的问题就是JTable中选择第一条记录后,可以显示在JTextField中,修改后可以写进数据库,并重新显示在JTable中,麻烦就来了,但重新再选择记录时,就会报错,下面是错误的部分信息,粘贴不完全,见谅,我估计就是在监听器哪里出错了。请大家帮帮忙
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1
at java.util.Vector.elementAt(Vector.java:435)
at javax.swing.table.DefaultTableModel.getValueAt(DefaultTableModel.java:621)
at javax.swing.JTable.getValueAt(JTable.java:1903)
at news_manger.Modifynews$2.mouseClicked(Modifynews.java:95)
at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:212)
at java.awt.Component.processMouseEvent(Component.java:5520)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3135)
at java.awt.Container.processEvent(Container.java:1966)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
回1楼的,用new vector(1,1)它会自动扩容啊。

ArrayIndexOutOfBoundsException

这个是Array数组越界,是个常见的错误,记住这个错误,你以后肯定会碰到的
你的代码不完整 都不好调试,我就直接看下。

Vector v =new Vector();
你直接这么初始化实例就行了

//一下是实例化Vector时候可以用的构造方法
Vector()
构造一个空向量,使其内部数据数组的大小为 10,其标准容量增量为零。
Vector(Collection<? extends E> c)
构造一个包含指定集合中的元素的向量,这些元素按其集合的迭代器返回元素的顺序排列。
Vector(int initialCapacity)
使用指定的初始容量和等于零的容量增量构造一个空向量。
Vector(int initialCapacity, int capacityIncrement)
使用指定的初始容量和容量增量构造一个空的向量。

你用的是第三种,
Vector(int initialCapacity, int capacityIncrement)
使用指定的初始容量和容量增量构造一个空的向量。
你都给这个向量指定了大小了。当然会出错的,
报ArrayIndexOutOfBoundsException错是必然的。
温馨提示:内容为网友见解,仅供参考
无其他回答

...第一次在Jtable中点击一条记录时没,当第二次点击时报
ArrayIndexOutOfBoundsException 这个是Array数组越界,是个常见的错误,记住这个错误,你以后肯定会碰到的 你的代码不完整 都不好调试,我就直接看下。Vector v =new Vector();你直接这么初始化实例就行了 \/\/一下是实例化Vector时候可以用的构造方法 Vector()构造一个空向量,使其内部数据数组的大小为...

JTable 单元格编辑问题?
在处理JTable单元格编辑问题时,通常会遵循以下步骤:首先,编辑前取表格单元格的数据。当用户在表格中选择一个单元格并开始输入时,系统需要记录并获取该单元格的原始数据。接着,在光标离开表格,即编辑结束时,取表格单元格的数据。此时,系统应当保存用户对单元格所做的更改。如果用户对单元格进行了修...

JAVA点击Jtable表格如何将点击的那一行数据分别输出出来
参考代码如下 import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;public class TableDemo extends JFrame {String[] names = { "姓名", "等级" };String[][] data = { { "张三", "A" }, { "李四", "B" }, { "王五", "C" } };p...

关于JAVA的JTable的疑问!求解!
只要一行对应一个实体对象即可,实体对象可以有嵌套属性,也就是包含多张表了。比如User类对应T_User表,Role类对应T_Role表 public class User{ private int id;private string name;private Role role;\/\/ getters and setters...} 开发一个针对实体对象的TableModel接口的实现类 ...

不知道我这java程序哪出错了,我在table的单元格中输入数据,按了回车...
没有绑定回车的事件吧

如何让Jtable不可编辑?
如果控制row和column的值,可以控制任何一个单元格可编辑或不可编辑。 网上很多回答的主要有两种错误:1、建议直接使用JTable的方法 setEnabled(false), 例如:jTable.setEnabled(false),但是这种方法只是使jTable失效,即让jTable只能看,不能做其他任何操作。2、在定义DefaultTableModel类时使用...

通过代码改变JTable里的内容,当我用鼠标去点击这个表格时,内容又还原...
JTable 有 构造 JTable table = new JTable(TableModel);。。。而TableModel有方法 void setValueAt(Object aValue,int rowIndex,int columnIndex)将 columnIndex 和 rowIndex 位置的单元格中的值设置为 aValue。

将Excel表格导入Jtable中的问题,错误java.lang.ArrayIndexOutOfBoundsExc...
Object[] object = new Object[jTable.getColumnCount()]; 中jTable.getColumnCount()为0值,也就是说新增了一个长度为0的数组。所以 object[j] = labelc00.getString();这句在j=0的时候就报错ArrayIndexOutOfBoundsException0 >= 0了。事例如下代码:int i=0; String [] strs = new S...

JAVA中的JTable如何在显示的时候默认选择到第一行
调用JTable的方法:setRowSelectionAllowe(true)使该表可以选中 setRowSelectionInterval(0,0)选择从 0到 0之间(包含两端)的行。

jtable的问题
import javax.swing.JFrame;public class TableDemo extends JFrame { \/\/ name文本框 private JTextField nameTextField;\/\/ email文本框 private JTextField emailTextField;private JTable table;\/\/ Swing中的Table数据是通过DefaultTableModel来实现的,(API上解释是表格模型什么的,具体的记不清了)priv...

相似回答