新手问一个关于DefaultTableModel中addrow问题

Furay2333 2016-06-15 03:06:41
package chap6;


import java.awt.BorderLayout;

import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.List;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Vector;

import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.DefaultTableModel;





class Person implements Serializable{
private static final long serialVersionUID=1L;
private String name;
private String phoneNumber;
public String getNmae(){
return name;
}
public String getPhoneNumber(){
return phoneNumber;
}
public Person(String name,String phoneNumber){
this.name=name;
this.phoneNumber=phoneNumber;
}
}
class PersonCollection{
private Collection<Person>collection=null;
public PersonCollection(){
load();
}
public void add(Person person){
collection.add(person);
}
public Person find(String name){
Iterator<Person>iter=collection.iterator();
while(iter.hasNext()){
Person p=iter.next();
if(name.equals(p.getNmae()))
return p;
}
return null;
}
public boolean del(String name){
Iterator<Person>iter=collection.iterator();
while(iter.hasNext()){
Person p=iter.next();
if(name.equals(p.getNmae())){
collection.remove(p);
return true;
}
}
return false;
}
public Collection<Person>personCollection(){
return collection;
}
public void load(){
File myFile=new File("data.dat");
if(myFile.exists()){//exists是判断文件是否存在
try{
ObjectInputStream si=new ObjectInputStream(new FileInputStream(myFile));
this.collection=(Collection<Person>)si.readObject();
si.close();
}catch(Exception e){
e.printStackTrace();
}
}else{
collection=new HashSet<Person>();
}
}
public void save(){
try{
ObjectOutputStream so=new ObjectOutputStream(new FileOutputStream("data.dat"));
so.writeObject(this.collection);
so.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
public class Contact3 extends JFrame implements ActionListener{
private Vector<Vector<String>> rowData;
private Vector<String> columnName;
JTextField jtext1;
JTextField jtext2;
JButton jb1;
JButton jb2;
JTabbedPane p;
JTable table;
// List list;
static String str="";
static DefaultTableModel dtm ;
JScrollPane scrollPanel;
JPanel panel1;
static String [][] alist=new String[1][2];
static Vector<String> v = new Vector<String>();
static PersonCollection persons=new PersonCollection();
static Scanner reader=new Scanner(System.in);
// ArrayList<String> list=new ArrayList<String>();
String [][]data=new String[0][1];
public final String[] COLUMN_NAMES=new String[]{"姓名","电话号码"};
public Contact3(){
jb1=new JButton("添加");
jb2=new JButton("退出");
jb1.addActionListener(this);
jb2.addActionListener(this);
JLabel jl1=new JLabel("姓名");
JLabel jl2=new JLabel("手机号码");
dtm=new DefaultTableModel(data,COLUMN_NAMES);


jtext1=new JTextField("");
jtext2=new JTextField("");


table=new JTable(dtm);
scrollPanel = new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

p=new JTabbedPane(JTabbedPane.TOP);
p.setBackground(Color.white);
panel1 = new JPanel();
JPanel a=new JPanel() ;
JPanel b=new JPanel();
JPanel c=new JPanel();
JPanel panel2 = new JPanel();
JPanel d=new JPanel();
JPanel panel3 = new JPanel();
p.add(panel1,"添加" );
p.add(panel2,"浏览" );
p.add(panel3,"查询" );


GridLayout myGridLayout=new GridLayout();
Container w1Container = this.getContentPane();

panel1.setLayout(new GridLayout(4,3));
a.setLayout(new GridLayout(1,2));
b.setLayout(new GridLayout(1,2));
c.setLayout(new FlowLayout());


a.add(jl1);
a.add(jtext1);
b.add(jl2);
b.add(jtext2);
c.add(jb1);
c.add(jb2);

panel1.add(a);
panel1.add(b);
panel1.add(c);
panel2.add(scrollPanel);
w1Container.add(p);
this.setSize(500,500);
this.setTitle("通讯录");
this.setVisible(true);

}

public static void add(String name,String phonenumber){
alist[0][0]=name.toString();
alist[0][1]=phonenumber.toString();
v.addElement(alist[0][0]);
v.addElement(alist[0][1]);
dtm.addRow(v);
dtm.getColumnCount();
persons.add(new Person(name,phonenumber));

}
public void actionPerformed(ActionEvent e) {
JButton button=(JButton)e.getSource();
if(button==jb1){
if(jtext1.getText().trim().equals("") && jtext2.getText().trim().equals("")){
JTextField jtext3=new JTextField("姓名电话为空!!");
jtext3.setBounds(150,270,100,30);
jtext3.setEditable(false);
panel1.add(jtext3);

}
else{
String name=jtext1.getText();
String phonenumber=jtext2.getText();
add(name,phonenumber);
}

}

else{
System.exit(0);
}
jtext1.setText("");
jtext2.setText("");
alist[0][0]=null;
alist[0][1]=null;
}
public static void main(String[] args) {
Contact3 c=new Contact3();

}


}






为什么我添加从第二个号码开始往后都是显示的第一个号码??
求大神指点小弟什么地方写错了!谢谢
...全文
376 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
awusoft 2016-06-22
  • 打赏
  • 举报
回复

alist[0][0]=name.toString();
		alist[0][1]=phonenumber.toString();
		v.addElement(alist[0][0]);
		v.addElement(alist[0][1]);
		dtm.addRow(v);
你这里,v中的值已经有了很多了,但是加入到行的时候,只会取前面两个.也就是第一次的两个值,可以将v定义来本地的对象
alist[0][0]=name.toString();
		alist[0][1]=phonenumber.toString();
		Vector<String> v=new Vector<String>();
		v.addElement(alist[0][0]);
		v.addElement(alist[0][1]);
		dtm.addRow(v);
		dtm.getColumnCount();
		persons.add(new Person(name,phonenumber));
而且你这里的alist[0][0]=name.toString(); alist[0][1]=phonenumber.toString(); 改的永远是同一个对像,就是说alist中只有一个数据,最新的那个
rayw0ng 2016-06-19
  • 打赏
  • 举报
回复
185 行的 vector 必须是 new 一个新的,不要用 static。

62,628

社区成员

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

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