JTable 插入行 出现 AWT-EventQueue-0 java.lang.ArrayIndexOutOfBoundsException: 0 >= 0

steven138 2009-07-07 05:31:27
MainFrame

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package jas.report.reclaimer;

import java.awt.Container;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import javax.swing.table.TableModel;

/**
*
* @author Steven
*/
public final class MainFrame extends JFrame {

private int screenWidth = Toolkit.getDefaultToolkit().getScreenSize().width;
private int frameWidth = 600;
private int screenHeight = Toolkit.getDefaultToolkit().getScreenSize().height;
private int frameHeight = 400;
private static MainFrame mf;
public JPanel panelDataBase;
public JPanel panelCorpList;

public static synchronized MainFrame getInstance() {
if (mf == null) {
mf = new MainFrame();
}
return mf;
}

private MainFrame() {
Container c = this.getContentPane();
c.setLayout(null);
panelDataBase = this.getPanelDataBase();
panelDataBase.setBounds((frameWidth - panelDataBase.getWidth()) / 2, (frameHeight - panelDataBase.getHeight()) / 2, panelDataBase.getWidth(), panelDataBase.getHeight());
panelCorpList = this.getPanelCorpList();
panelCorpList.setBounds((frameWidth - panelCorpList.getWidth()) / 2, (frameHeight - panelCorpList.getHeight()) / 2, panelCorpList.getWidth(), panelCorpList.getHeight());
c.add(panelDataBase);
c.add(panelCorpList);

this.setTitle("报表系统文件清理程序");
this.setSize(frameWidth, frameHeight);
this.setLocation((screenWidth - this.getSize().width) / 2, (screenHeight - this.getSize().height) / 2);
this.setResizable(false);
this.setVisible(true);

this.addWindowListener(
new WindowAdapter() {

@Override
public void windowClosing(WindowEvent e) {
//OracleDBConn.closedb();
System.exit(0);
}
});
}
JComboBox cmbDataBase = new JComboBox();
JComboBox cmbIP = new JComboBox();
JTextField txtPort = new JTextField();
JComboBox cmbSid = new JComboBox();
JTextField txtUserName = new JTextField();
JPasswordField txtPwd = new JPasswordField();

private JPanel getPanelDataBase() {
JPanel panel1 = new JPanel();
panel1.setLayout(null);
panel1.setSize(400, 300);

JLabel label1 = new JLabel("数据库类型 :");
label1.setBounds(0, 0, 100, 20);
label1.setHorizontalAlignment(SwingConstants.RIGHT);

JLabel label2 = new JLabel("IP :");
label2.setBounds(0, 30, 100, 20);
label2.setHorizontalAlignment(SwingConstants.RIGHT);

JLabel label3 = new JLabel("Port :");
label3.setBounds(0, 60, 100, 20);
label3.setHorizontalAlignment(SwingConstants.RIGHT);

JLabel label4 = new JLabel("SID :");
label4.setBounds(0, 90, 100, 20);
label4.setHorizontalAlignment(SwingConstants.RIGHT);

JLabel label5 = new JLabel("用户名 :");
label5.setBounds(0, 120, 100, 20);
label5.setHorizontalAlignment(SwingConstants.RIGHT);

JLabel label6 = new JLabel("密码 :");
label6.setBounds(0, 150, 100, 20);
label6.setHorizontalAlignment(SwingConstants.RIGHT);


DefaultComboBoxModel comboBoxModel1 = new DefaultComboBoxModel();
comboBoxModel1.addElement("Oracel");
cmbDataBase.setModel(comboBoxModel1);
cmbDataBase.setBounds(120, 0, 200, 20);

DefaultComboBoxModel comboBoxModel2 = new DefaultComboBoxModel();
comboBoxModel2.addElement("22.117.79.27");
comboBoxModel2.addElement("22.117.79.11");
cmbIP.setEditable(true);
cmbIP.setModel(comboBoxModel2);
cmbIP.setBounds(120, 30, 200, 20);

txtPort.setText("1521");
txtPort.setBounds(120, 60, 200, 20);

DefaultComboBoxModel comboBoxModel3 = new DefaultComboBoxModel();
comboBoxModel3.addElement("jasdb");
comboBoxModel3.addElement("pubdb");
comboBoxModel3.addElement("testdb");
cmbSid.setEditable(true);
cmbSid.setModel(comboBoxModel3);
cmbSid.setBounds(120, 90, 200, 20);

txtUserName.setText("jas");
txtUserName.setBounds(120, 120, 200, 20);

txtPwd.setText("a123456");
txtPwd.setEchoChar('*');
txtPwd.setBounds(120, 150, 200, 20);

JButton button = new JButton("下一步");
button.setBounds(160, 250, 80, 20);
button.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent ae) {
cmbIP.setSelectedItem(cmbIP.getSelectedItem().toString().trim());
txtPort.setText(txtPort.getText().trim());
cmbSid.setSelectedItem(cmbSid.getSelectedItem().toString().trim());
txtUserName.setText(txtUserName.getText().trim());
if (cmbIP.getSelectedItem().toString().length() == 0) {
JOptionPane.showMessageDialog(panelDataBase, "请输入IP地址", "Error Message", JOptionPane.WARNING_MESSAGE);
} else if (txtPort.getText().length() == 0) {
JOptionPane.showMessageDialog(panelDataBase, "请输入端口", "Error Message", JOptionPane.WARNING_MESSAGE);
} else if (cmbSid.getSelectedItem().toString().length() == 0) {
JOptionPane.showMessageDialog(panelDataBase, "请输入SID", "Error Message", JOptionPane.WARNING_MESSAGE);
} else if (txtUserName.getText().length() == 0) {
JOptionPane.showMessageDialog(panelDataBase, "请输入用户名", "Error Message", JOptionPane.WARNING_MESSAGE);
} else if (txtPwd.getPassword().length == 0) {
JOptionPane.showMessageDialog(panelDataBase, "请输入密码", "Error Message", JOptionPane.WARNING_MESSAGE);
} else {
panelDataBase.setVisible(false);
panelCorpList.setVisible(true);
Thread t1 = new Thread(new CorpReportList());
t1.start();
}
}
});
panel1.add(label1);
panel1.add(label2);
panel1.add(label3);
panel1.add(label4);
panel1.add(label5);
panel1.add(label6);
panel1.add(cmbDataBase);
panel1.add(cmbIP);
panel1.add(txtPort);
panel1.add(cmbSid);
panel1.add(txtUserName);
panel1.add(txtPwd);
panel1.add(button);

return panel1;
}
public JLabel lblCorpList;
public JTable jTable;
public JButton btnSelectCorp;

private JPanel getPanelCorpList() {
JPanel panel1 = new JPanel();
panel1.setLayout(null);
panel1.setSize(550, 390);

lblCorpList = new JLabel("正在读取数据,请稍候......");
lblCorpList.setBounds(0, 0, 300, 20);

jTable = new JTable();
TableColumn col1 = new TableColumn();
col1.setHeaderValue("公司名称");
col1.setWidth(400);
TableColumn col2 = new TableColumn();
col2.setHeaderValue("成功");
col2.setWidth(50);
TableColumn col3 = new TableColumn();
col3.setHeaderValue("失败");
col3.setWidth(50);
TableColumn col4 = new TableColumn();
col4.setHeaderValue("总计");
col4.setWidth(50);
jTable.addColumn(col1);
jTable.addColumn(col2);
jTable.addColumn(col3);
jTable.addColumn(col4);
JScrollPane scrollPane = new JScrollPane(jTable);
scrollPane.setBounds(0, 25, 550, 300);

btnSelectCorp = new JButton("下一步");
btnSelectCorp.setBounds(470, 330, 80, 20);
btnSelectCorp.setEnabled(false);

panel1.add(lblCorpList);
panel1.add(scrollPane);
panel1.add(btnSelectCorp);
panel1.setVisible(false);
return panel1;
}
}
...全文
1530 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
stefyyy 2011-09-21
  • 打赏
  • 举报
回复
给后来者:的确是4楼所说的,将Jtable中写死了,后来的数据如果缺少,比如只有3行,但Jtable在初次设置model时有4行,则会报这个异常。

解决方法:就是在放入不足4行的新数据时,给Jtable从新new Jtable(),再给model就可以解决。记得在把新的table放到panel或者需要的地方上。不见得最好,但可以解决。
三少Tan 2011-06-17
  • 打赏
  • 举报
回复
up 我也遇到这个问题了
linyu19872008 2010-08-06
  • 打赏
  • 举报
回复
这个问题貌似还没解决掉啊。。。
gdwg2046 2010-05-13
  • 打赏
  • 举报
回复
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 5 >= 5
是什么意思?
steven138 2009-07-13
  • 打赏
  • 举报
回复
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0 >= 0
  • 打赏
  • 举报
回复
上面什么错提示
steven138 2009-07-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 yanhan0615 的回复:]
你构造的JTable是一个4列的表,所以插入的时候应该这样:

Java code
DefaultTableModel tableModel = (DefaultTableModel) MainFrame.getInstance().jTable.getModel();
tableModel.insertRow(0, new String[]{"a1","a2","a3","a4"});
[/Quote]
没用,照样报错
zuijiejina 2009-07-09
  • 打赏
  • 举报
回复
4楼正解
lyre129 2009-07-08
  • 打赏
  • 举报
回复
也不会,期待解答!
yanhan0615 2009-07-08
  • 打赏
  • 举报
回复
你构造的JTable是一个4列的表,所以插入的时候应该这样:

DefaultTableModel tableModel = (DefaultTableModel) MainFrame.getInstance().jTable.getModel();
tableModel.insertRow(0, new String[]{"a1","a2","a3","a4"});

steven138 2009-07-07
  • 打赏
  • 举报
回复
CorpReportList

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package jas.report.reclaimer;

import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

/**
*
* @author Steven
*/
public class CorpReportList implements Runnable {

public void run() {
try {
Thread.sleep(5000);
DefaultTableModel tableModel = (DefaultTableModel) MainFrame.getInstance().jTable.getModel();
tableModel.insertRow(0, new String[]{"aa"});
MainFrame.getInstance().lblCorpList.setText("以下是有报表的公司列表:");
MainFrame.getInstance().btnSelectCorp.setEnabled(true);
} catch (Exception e) {
JOptionPane.showMessageDialog(MainFrame.getInstance().panelCorpList, "程序遇到不可预知的错误", "Error Message", JOptionPane.ERROR_MESSAGE);
System.out.println(e);
}
}
}


对jtable设值就出现:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0 >= 0
at java.util.Vector.elementAt(Vector.java:427)
at javax.swing.table.DefaultTableModel.getValueAt(DefaultTableModel.java:633)
at javax.swing.JTable.getValueAt(JTable.java:2639)
at javax.swing.JTable.prepareRenderer(JTable.java:5653)
at javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:2072)
at javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:1974)
at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:1770)
at javax.swing.plaf.ComponentUI.update(ComponentUI.java:143)
at javax.swing.JComponent.paintComponent(JComponent.java:763)
at javax.swing.JComponent.paint(JComponent.java:1027)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5122)
at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:285)
at javax.swing.RepaintManager.paint(RepaintManager.java:1128)
at javax.swing.JComponent._paintImmediately(JComponent.java:5070)
at javax.swing.JComponent.paintImmediately(JComponent.java:4880)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:723)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:679)
at javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:659)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:128)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
求解答???

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧