import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Vector;import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableModel;
public class Demo extends JFrame { final public JTextField name;
final public JTextField jg;
final public JTextField id;
final public JTextField bj;
public JTable table;
StringBuffer s = new StringBuffer();
StringBuffer sb;
Vector<String> vector;
DefaultTableModel dtm;
Vector titles;
Vector allrows;
/**
 * Launch the application
 * @param args
 */
public static void main(String args[]) {
try {
Demo frame = new Demo();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
} /**
 * Create the frame
 */
public Demo() {
super();
getContentPane().setLayout(null);
setBounds(100, 100, 500, 375);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); final JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(98, 106, 302, 120);
getContentPane().add(scrollPane); bj = new JTextField();
bj.setBounds(275, 10, 84, 19);
getContentPane().add(bj); id = new JTextField();
id.setBounds(121, 47, 84, 19);
getContentPane().add(id); jg = new JTextField();
jg.setBounds(275, 47, 84, 19);
getContentPane().add(jg); final JButton button = new JButton();
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {

int row = table.getSelectedRow();
int rows = table.getSelectedRowCount();

Vector vector= new Vector();

vector.add(name.getText());
vector.add(bj.getText());
vector.add(id.getText());
vector.add(jg.getText());

dtm.insertRow(row, vector);
dtm.removeRow(row+1);
}
});
button.setText("更新");
button.setBounds(190, 77, 93, 23);
getContentPane().add(button); final JButton button_1 = new JButton();
button_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JFileChooser jf = new JFileChooser();
int flag = jf.showOpenDialog(null);
if(flag==JFileChooser.APPROVE_OPTION)
{
File file = jf.getSelectedFile();
titles = new Vector();
titles.add("姓名");
titles.add("班级");
titles.add("学号");
titles.add("籍贯");

allrows = new Vector<String>();



FileReader isr;
BufferedReader br;
try {
isr = new FileReader(file);
br = new BufferedReader(isr);
String s=null;
String[] str;
try {
while((s=br.readLine())!=null)
{
str = s.split("\\|");
vector = new Vector();
vector.add(str[0]);
vector.add(str[1]);
vector.add(str[2]);
vector.add(str[3]);
allrows.add(vector);


}
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
} catch (FileNotFoundException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
dtm = new DefaultTableModel();
dtm.setDataVector(allrows, titles);
table.setModel(dtm);
}
}
});
button_1.setText("导入");
button_1.setBounds(125, 260, 72, 23);
getContentPane().add(button_1); final JButton button_2 = new JButton();
button_2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
}
});
button_2.setText("导出");
button_2.setBounds(220, 260, 72, 23);
getContentPane().add(button_2); final JButton button_3 = new JButton();
button_3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int row = table.getSelectedRow();
dtm.removeRow(row); }
});
button_3.setText("删除");
button_3.setBounds(315, 260, 72, 23);
getContentPane().add(button_3); name = new JTextField();
name.setBounds(121, 10, 84, 19);
getContentPane().add(name);
table = new JTable();
table.getSelectionModel().addListSelectionListener(new ListSelectionListener(){
public void valueChanged(ListSelectionEvent arg0) {
int row = table.getSelectedRow();
String xm=table.getValueAt(row,0).toString();
String bj1 = table.getValueAt(row,1).toString();
String xh1 = table.getValueAt(row,2).toString();
String jg1 = table.getValueAt(row,3).toString();

name.setText(xm);
bj.setText(bj1);
id.setText(xh1);
jg.setText(jg1);
}    
});   
scrollPane.setViewportView(table);

}}

解决方案 »

  1.   

    Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1
    at java.util.Vector.elementAt(Unknown Source)
    at javax.swing.table.DefaultTableModel.getValueAt(Unknown Source)
    at javax.swing.JTable.getValueAt(Unknown Source)
    at Demo$5.valueChanged(Demo.java:186)
    at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
    at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
    at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
    at javax.swing.DefaultListSelectionModel.removeIndexInterval(Unknown Source)
    at javax.swing.JTable.tableRowsDeleted(Unknown Source)
    at javax.swing.JTable.tableChanged(Unknown Source)
    at javax.swing.table.AbstractTableModel.fireTableChanged(Unknown Source)
    at javax.swing.table.AbstractTableModel.fireTableRowsDeleted(Unknown Source)
    at javax.swing.table.DefaultTableModel.removeRow(Unknown Source)
    at Demo$4.actionPerformed(Demo.java:167)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
      

  2.   

    你在代码的每93行和第113行有两个错误:Vector<String> vector; 这是什么语法?我没见过
    还有,运行到 String xm=table.getValueAt(row,0).toString();是否 xm 赋值了,我打印 xm 是没有的,所以你再看看是不是 JTable 的模型选择错误了如果这个地方没有赋值,那你的 vector里面肯定有问题再找找看吧
      

  3.   

    是的,我是通过从外部导入一个txt文件,读取里面的内容显示在jtable里面,而且可以对数据进行更新和删除,更新是可以的,删除功能是可以实现,但是要报上面的异常。Vector<String> vector = new  Vector<String>();表示这个集合里面存的是字符串类型的数据