Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 向ArrayList添加对象时出现问题_Java_User Interface_Arraylist_Jtable - Fatal编程技术网

Java 向ArrayList添加对象时出现问题

Java 向ArrayList添加对象时出现问题,java,user-interface,arraylist,jtable,Java,User Interface,Arraylist,Jtable,当我将对象TestData添加到ArrayList时,出现了一个错误,gui没有正确显示,下面是我的代码: (错误出现在lstest.add(新测试数据(“Jon”,0));) 主要类别: import java.awt.*; import java.awt.event.*; import javax.swing.table.*; import javax.swing.event.*; import javax.swing.*; import java.util.*; import javax

当我将对象
TestData
添加到ArrayList时,出现了一个错误,gui没有正确显示,下面是我的代码:

(错误出现在
lstest.add(新测试数据(“Jon”,0));

主要类别:

import java.awt.*;
import java.awt.event.*;
import javax.swing.table.*;
import javax.swing.event.*; 
import javax.swing.*;
import java.util.*;
import javax.swing.border.*;
public class Test extends JFrame implements ActionListener, ListSelectionListener
{
    private ArrayList<TestData> lstTest = null;
    private TestData objTest;
    public TestTable panTestTable;
    private ListSelectionModel lsmTest;
    private JButton btnAdd;
    private static final String Command_Add = "Add";

    public Test()
    {
        super("Test");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        try{  UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); }
        catch (Exception e){  System.out.println("Unable to load Windows look and feel"); }
        setPreferredSize(new Dimension(500, 400));
        ((JPanel) getContentPane()).setBorder(new EmptyBorder(13, 13, 13, 13) );
        JPanel panMain = (JPanel) getContentPane();

        lstTest = new ArrayList<TestData>();
        lstTest.add(new TestData("Jon", 0));
        panTestTable = new TestTable(lstTest);
        lsmTest = panTestTable.tabTest.getSelectionModel();
        lsmTest.addListSelectionListener(this);
        panTestTable.setBorder(new EmptyBorder(1, 1, 1, 1));

        panMain.add(panTestTable, "Center");
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
        setResizable(false);
    }

    public void actionPerformed(ActionEvent e){}

    public void valueChanged(ListSelectionEvent e){}

    public static void main(String[] args)
    {
        new Test();
    }
}
EDIT2:

这是我运行程序时弹出的gui:

EDIT3:

这是删除
lstest.add(newtestdata(“Jon”,0))后没有错误的gui从代码:


Dan发现了问题,但代码中还有另一个错误:

if (row < 0 || row > lstTestData.size()) return null;
if(row<0 | | row>lstestdata.size())返回null;
应该是:

if (row < 0 || row >= lstTestData.size()) return null;
if(row<0 | | row>=lstestdata.size())返回null;

在创建类数组的BillTableModel中,不应使用基元类型。 使用Double.class而不是Double.class

这就解决了你的问题

public class BillTableModel extends AbstractTableModel {
    protected String[] columnNames = new String[] { "Name", "Payment" };
    protected ArrayList<TestData> lstTestData;
    protected Class[] types = new Class[] { String.class, Double.class };
    ....
    ....
}
公共类BillTableModel扩展了AbstractTableModel{
受保护字符串[]columnNames=新字符串[]{“名称”,“付款”};
受保护的ArrayList LSTestData;
受保护类[]类型=新类[]{String.Class,Double.Class};
....
....
}
而不是这个

public void DeleteAllRows()
    {
         for( int i = absTest.getRowCount() - 1; i >= 0; i-- )
         {
              lstTestData.remove(i);
              SetData(lstTestData);
         }
    }

只需创建一个空列表并调用SetData。

如果您复制错误的实际内容,可能会有所帮助。哪个错误?请发布您收到的错误。您发布的错误似乎与您所说的发生的线路无关。“您的表呈现程序有问题,它与将测试数据添加到列表无关。@Thomas当我删除该行时,gui将正确显示,而不会显示任何内容。”error@Eng.Fouad我猜那是因为列表是空的,渲染器没有到达中断的代码。它是否应该是
row>=…size()
无论如何?@dcn:的确,我看到了,编辑了我的答案,然后你的评论出现了:谢谢你,丹,你救了我一天:)
if (row < 0 || row >= lstTestData.size()) return null;
public class BillTableModel extends AbstractTableModel {
    protected String[] columnNames = new String[] { "Name", "Payment" };
    protected ArrayList<TestData> lstTestData;
    protected Class[] types = new Class[] { String.class, Double.class };
    ....
    ....
}
public void DeleteAllRows()
    {
         for( int i = absTest.getRowCount() - 1; i >= 0; i-- )
         {
              lstTestData.remove(i);
              SetData(lstTestData);
         }
    }