gpt4 book ai didi

java - 将数组列表数据存储在 JTable 中

转载 作者:行者123 更新时间:2023-12-02 14:06:06 25 4
gpt4 key购买 nike

在我已经创建的 JTable 中存储数据(写入 GUI)时遇到问题。问题是,当我单击 GUI 中的添加按钮时,它不会在 JTable 中显示它,而是打开另一个窗口并在那里显示它。所以它添加了,但它没有将其显示到表中。这是在另一个窗口中显示信息的代码部分:

import java.lang.Object;
import java.io.*;
import java.util.*;

public class MemberManager {
File custFile;

private Member m1 =
new Member("M0001", "Mark", "Abela", "13/05/90", "121 Kent Street", "21469432", "99456209");
private Member m2 =
new Member("M0002", "John", "Sant", "25/11/84", "55 Golden Road", "21226932", "79513625");

private ArrayList<Member> memMemb = new ArrayList<Member>();

public MemberManager(){
memMemb.add(m1);
memMemb.add(m2);
}

public String[][] getMembers(){
int pos = 0;

//Creating the table with the players data
String data [][] = new String[memMemb.size()][8];

for (Object obj : memMemb){
Member mem = (Member)(obj);
data[pos][0] = mem.getID();
data[pos][1] = mem.getName();
data[pos][2] = mem.getSurname();
data[pos][3] = mem.getDob();
data[pos][4] = mem.getAddress();
data[pos][5] = mem.getTel();
data[pos][6] = mem.getMob();

}
return data;
}

public void addMember(String id, String name, String surname, String dob, String address, String tel, String mob){
Member tempMem = new Member();

tempMem.setID(id);
tempMem.setName(name);
tempMem.setSurname(surname);
tempMem.setDob(dob);
tempMem.setAddress(address);
tempMem.setTel(tel);
tempMem.setMob(mob);

memMemb.add(tempMem);


FileInputStream fis = null;
FileOutputStream fos = null;
try {
fos = new FileOutputStream("Member Data");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(memMemb);
oos.flush();
}
catch(IOException e) {
e.printStackTrace();
}
finally {
try {
fos.close();
}
catch(IOException e) {
e.printStackTrace();
}
}

try {
// read back
fis = new FileInputStream("Member Data");
ObjectInputStream ois = new ObjectInputStream(fis);
Object obj = ois.readObject();
memMemb = (ArrayList<Member>) obj;
ArrayList<Member> listFromFile = (ArrayList) obj;
for (Member member: listFromFile) {
System.out.println(member.toString());
}
}catch (IOException io){
System.err.println("Cannot access or write to file");
}catch (Exception e){
e.printStackTrace();
}
finally {
try {
fis.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
}

我使用的 JTable 是不同包中的默认表模型。我在按钮上使用 mouseListener 来添加数据...这是代码的一部分...:-

    memAddOk.addMouseListener(this);
memAddExit.addMouseListener(this);
}

public void mouseClicked(MouseEvent e){
if (e.getSource().equals(memAddOk)){
id = textBox[0].getText();
name = textBox[1].getText();
surname = textBox[2].getText();
dob = textBox[3].getText();
address = textBox[4].getText();
tel = textBox[5].getText();
mob = textBox[6].getText();

MemberManager tempData = new MemberManager();
tempData.addMember(id, name, surname, dob, address, tel, mob);
} else
if (e.getSource().equals(memAddExit)) {
this.dispose();
}
}

如何将此代码存储在 JTable 中?

最佳答案

The problem is, when I click the add button in the GUI, instead of displaying it in the JTable, it opens another window and displays it there.

它只是做你让它做的事情:

public void mouseClicked(MouseEvent e){ 
if (e.getSource().equals(memAddOk)){
id = textBox[0].getText();
// .... etc..


// !!!! *** Here you create a new MemberManager object *** !!!!
MemberManager tempData = new MemberManager();


tempData.addMember(id, name, surname, dob, address, tel, mob);
} else
//... etc..

解决方案:

  • 不要在监听器中创建新的 MemberManager 对象。
  • 相反,请确保您的监听器类具有对当前显示的 MemberManager 对象的引用,以便您可以向其中添加患者。
  • 您通常通过将 MemberManager 传递到监听器的构造函数或通过 setter 方法参数来获取此引用。
  • 再次强调,不要在 JButton 上使用 MouseListener,而应使用 ActionListener,因为它们是专门为此构建的。 MouseListeners 可能会导致奇怪的行为,包括但不限于尽管被禁用但仍然有效的按钮。

关于java - 将数组列表数据存储在 JTable 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9447903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com