gpt4 book ai didi

java - 将用户输入数据添加到 ArrayList 并使用自定义 Tablemodel 将其显示到 Jtable 中

转载 作者:太空宇宙 更新时间:2023-11-04 06:42:52 25 4
gpt4 key购买 nike

我在更新和显示人员列表(电话簿联系人)时遇到一些问题。我尝试使用 Jbutton 将用户输入数据添加到数组列表并显示在 Jtable 中。

如果您能告诉我是否存在设计或实现问题,我将不胜感激。预先感谢您的建议!

这是部分代码

自定义表格模型

package cartedetelefon.GUI;

import static cartedetelefon.CarteDeTelefon.listaContacte;
import cartedetelefon.Exceptii.ExceptieContactDejaDefinit;
import cartedetelefon.NrTel;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.AbstractTableModel;

public class TblModel extends AbstractTableModel implements TableModelListener{

NrTel[] contacte = new NrTel[0];

@Override
public int getRowCount() {
return listaContacte.size();
}

@Override
public int getColumnCount() {
return 6;
}

@Override
public Object getValueAt(int linie, int coloana) {

NrTel contact = contacte[linie];
switch (coloana){
case 0: return contact;
case 1: return contact.getPersoana().getNume();
case 2: return contact.getPersoana().getPrenume();
case 3: return contact.getNrmobil();
case 4: return contact.getNrbirou();
case 5: return contact.getNrhome();

default: return "Eroare";
}
}

public void adaugareContact(NrTel c) throws ExceptieContactDejaDefinit {
if (listaContacte.contains(c)) throw new ExceptieContactDejaDefinit("Datele de contact pentru "+c.getPersoana()+ " exista!");
listaContacte.add(c);
fireTableRowsInserted(contacte.length-1, contacte.length-1);
}

@Override
public String getColumnName(int coloana) {
return new String[] {"Nume", "Prenume", "CNP", "Mobil", "Birou", "Resedinta"}[coloana];
}

@Override
public void tableChanged(TableModelEvent tme) {
int row = tme.getFirstRow();
int column = tme.getColumn();
TblModel model = (TblModel)tme.getSource();
String coloana = model.getColumnName(column);
Object data = model.getValueAt(row, column);
}

}

电话簿类

public class CarteDeTelefon{

public static List<NrTel> listaContacte = new ArrayList<>();
public Collection<NrTel> getToateContactele() {
return listaContacte;
}

图形用户界面

package cartedetelefon.GUI;


import cartedetelefon.CarteDeTelefon;
import static cartedetelefon.CarteDeTelefon.listaContacte;
import cartedetelefon.NrTel;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Toolkit;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JWindow;
import javax.swing.SwingUtilities;
import javax.swing.event.TableModelListener;


public class GUI extends javax.swing.JFrame {
static private final String newline = "\n";

@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents(){}

private void adaugaActionPerformed(java.awt.event.ActionEvent evt) {
**// TODO add your handling code here:**

// a possible solution but i don't know how to link this with the arraylist
Object row[]=new Object[6];
while((row[0]=JOptionPane.showInputDialog("Nume:")).equals(""));
while((row[1]=JOptionPane.showInputDialog("Prenume:")).equals(""));
while((row[2]=JOptionPane.showInputDialog("Cod numeric personal:")).equals(""));
while((row[3]=JOptionPane.showInputDialog("Numar telefon mobil:")).equals(""));
while((row[4]=JOptionPane.showInputDialog("Numar telefon birou:")).equals(""));
while((row[5]=JOptionPane.showInputDialog("Numar telefon resedinta:")).equals(""));


//model.adaugareContact(new NrTel(null, newline, newline, newline, newline)); this is not working

}


JTextArea log;
private TableModelListener tml;

/**
* Creates new form GUI
*/
public GUI() {
initComponents();

TblModel model = new TblModel();
listaAbonatiGUI.setModel(model);


listaAbonatiGUI.getModel().addTableModelListener(tml);
}

public static void main(String args[]){
CarteDeTelefon pb = new CarteDeTelefon();
Collection<NrTel> contacte = pb.getToateContactele();
Collections.sort((List<NrTel>) contacte);
System.out.println("Contacte cu detalii " +contacte);



/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new GUI().setVisible(true);
}
});
}

最佳答案

I try to add user input data to an array list using a Jbutton and to be displayed in a Jtable.

这是错误的做法。 TableModel 应保存所有数据。所以你需要一个方法来向TableModel添加一行数据

NrTel[] contacte = new NrTel[0];

您试图创建一个数组来保存所有数据,但它只有 0 行,这是没有意义的。您不应该使用数组来保存数据,因为您不知道应该添加多少行。相反,您应该使用 ArrayList 来保存 NrTel 对象。然后,每次向模型添加一行时,只需将对象添加到 ArrayList 即可。

看看Row Table Model用于自定义模型的通用实现。您仍然需要实现一些方法来支持您的 NrTel 对象。 JButtonTableMode.java 显示了如何实现这些方法,只需更改类的代码即可。

关于java - 将用户输入数据添加到 ArrayList 并使用自定义 Tablemodel 将其显示到 Jtable 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24439536/

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