繁体   English   中英

Java:在表中显示ArrayList中的所有数据

[英]Java: Displaying all data in ArrayList in a table

我在以JTable形式在ArrayList中显示数据时遇到了一些问题。

ArrayList由数据组成,但仅当用户在GUI中将数据输入JTextField时(此GUI在另一个类中)。 我用过getText()。

我的ArrayList在一个类中,但JTable的JFrame的GUI在另一个类中。 我似乎无法在GUI中创建JTable,我似乎无法从ArrayList中获取数据以显示在JTable中。

ArrayList由12个JTextField组成,所有这些都是字符串,应该是JTable的标题。 当程序启动时,用户可以根据需要多次输入自己的数据,这些数据存储在每个标题下的ArrayList中。 由于用户一直输入不同的数据,因此这些数据总是不同的,因此,我认为,我不能使用这个:

String[] columnNames = {"First Name",
                    "Last Name",
                    "Sport",
                    "# of Years",
                    "Vegetarian"};

Object[][] data = {
    {"Kathy", "Smith",
     "Snowboarding", new Integer(5), new Boolean(false)},
    {"John", "Doe",
     "Rowing", new Integer(3), new Boolean(true)},
    {"Sue", "Black",
     "Knitting", new Integer(2), new Boolean(false)},
    {"Jane", "White",
     "Speed reading", new Integer(20), new Boolean(true)},
    {"Joe", "Brown",
     "Pool", new Integer(10), new Boolean(false)}
};

你觉得我该怎么做? 我该如何实现呢?

任何帮助深表感谢!

JTable使用TableModel作为其支持模型,您将其提供给JTable构造函数。 无论TableModel暴露什么, JTable都会显示。 您的后备数据源看起来很简单,您可以使用内置的DefaultTableModel 或者,您可以实现自己的TableModel ,它包装您自己的数据源。

编辑: JTable有一个构造函数,可以直接接受您可以使用的简单数组数据。

public JTable(Object[][] rowData, Object[] columnNames)

仅供参考,使用Java 1.5及更高版本,您可以使用123替换new Integer(123) ,因为编译器会将此自动装箱到Integer.valueOf(123) new Boolean(true)

看来你必须使用TableModel

您的程序流程可能如下所示:

  1. 从用户获取数据(列,单元格)。 (你在使用命令行吗?)
  2. 用这些数据填充ArrayList (或你持有的任何数据结构)。
  3. 创建一个新的TableModel实例,以您的数据结构为后盾,并将其传递给JTable (如果您使用任何AbstractTableModel.fireTableXXXXX()方法,则可以在不替换TableModel情况下完成此操作)。

不确定它是否是正确的做法,但要使ArrayListcolumnNames静态。

数据数组应拆分为单独的ArrayLists:

ArrayList<String> firstNameAR
ArrayList<String> lastNameAR
ArrayList<String> sportAR

等等。

然后在你的表模型中使用如下:

(最终变量只是从0到n的数字)

public Object getValueAt(int row, int column) {
        switch (column) {
        case Data.FIRSTNAME:
            return Data.firstNameAR.get(row);
        case Data.LASTNAME:
            return Data.lastNameAR.get(row);
        case Data.SPORT:
            return Data.sportAR.get(row);
        }
        return null;

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM