关于java中JTable中的错误。下面是出错的代码问题。第一次在Jtable中点击一条记录时没,当第二次点击时报
publicvoidcreat(){content.removeAllElements();sql="select*fromnewsinfo";JavaBeanbean=...
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)它会自动扩容啊。 展开
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)它会自动扩容啊。 展开
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错是必然的。
这个是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错是必然的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询