按列向JTable列添加数据

时间:2016-03-15 13:15:33

标签: java swing jtable

我设置了三个一维数组:

 String [] columnnames = {"Item", "Volume of Item (Cubic Feet)"};

 String [] livingroomitems = {"Articial Plant/Hall Tree", "Bar Portable", "Bench", "Bookcase", "Bookshelves", "Chair,Arm", "Chair,Occasional",
          "Chair,Overstuffed", "Chair,Recliner", "Chair, Rocker", "Chair, Straight", "Clock, Grandfather*", "Computer",
          "Desk, Winthrop", "Desk, Secretary", "Desk, Office", "Desk, Roll Top", "Entertainment Center", "Fireplace Equipment",
          "Futon, Single", "Futon, Double", "Futon, Queen", "Futon, King", "Lamp, Floor", "Magazine Rack", "Music Cabinet",
          "Ottoman", "Piano, Baby Grand*", "Piano, Parior Grand*", "Piano, Spinet", "Rugs, Large", "Rugs, Small", "Sofa, Large",
          "Sofa, Love Seat", "Sofa, Sectional", "Sofa, Hideabed", "Stereo Components", "Stereo Speakers", "Table, Coffee",
          "Table, End or Nest", "Table, Sofa", "TV Big Screen*", "TV Console", "TV Model", "TV Stand", "VCR", "Chandelier*"};

 int [] livingroomdata = {6, 15, 5, 20, 5, 10, 15, 25, 25, 25, 5, 20, 10, 20, 35, 30, 30, 30, 5, 40, 60, 65, 70, 3, 2, 10, 5, 70, 80, 60, 10,
        5, 50, 35, 30, 50, 10, 10, 10, 5, 10, 40, 20, 5, 3, 2, 10 }; 

我理解通常情况下,我必须创建一个2-D ObjectVector以将livingroomitemslivingroomdata并排添加到{{1} }。但是,我希望将JTable保留为livingroomdata,以便稍后我可以操作数据。是否有可能将1-D阵列逐列放入int列,以便我不必更改数据类型?

3 个答案:

答案 0 :(得分:3)

  

我想将livingroomdata保留为int,以便稍后可以操作数据。

所有数据操作都应通过TableModel完成。你有像getValueAt()和setValueAt()这样的方法来操纵数据。然后,当数据被更改时,JTable将立即反映更改。

您永远不应该更改数组中的数据。 TableModel不会知道表永远不会显示更改数据的更改。

如果您需要操作JTable范围之外的数据,也就是说您不希望更改反映在表中,那么您应该扩展DefaultTableModel并创建getVolumeValues()方法这将返回数组中TableModel的所有int值。

  

是否有可能通过列

将1-D数组转换为JTable列

尽管如此,您最初可以使用addColumn(...)方法使用数组中的数据填充DefaultTableModel。数据将从Array复制到DefaultTableModel使用的Vector,因此您不应再次引用Array数据(如果您的表可编辑),因为数据可能已更改。

答案 1 :(得分:2)

我至少看到两种方法:

  1. 创建自己的表格模型并覆盖相应的方法(例如getValueAt(row,col)等。)
  2. 创建一个由数组支持的包装器对象,并处理它的一个索引。请注意,虽然这适用于只读单元格,但是可编辑单元格至少需要一些额外的设置,如果它可以工作(我不确定该表是否会尝试创建一个新实例,在这种情况下,您将确定该数组要处理的索引)。

答案 2 :(得分:0)

首先,我强烈建议您遵循其他答案的建议,但可以做您要求的事情。

import javax.swing.*;
import javax.swing.table.DefaultTableModel;

public class TableDataTest extends JDialog
{
    public TableDataTest()
    {
        DefaultTableModel model = new DefaultTableModel();
        model.addColumn("test1");
        model.addColumn("test2");
        model.addRow(new String[]{"testrow", "testrow"});
        model.addRow(new String[]{"testrow2", "testrow2"});
        JTable myTable = new JTable(model);

        add(new JScrollPane(myTable));
    }

    public static void main(String args[])
    {
        JDialog dlg = new TableDataTest();
        dlg.setSize(100, 100);
        dlg.setModal(true);
        dlg.setVisible(true);
        dlg.dispose();
    }
}