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);
}
}