【问题标题】:Passing arraylist values to a jtable将arraylist值传递给jtable
【发布时间】:2016-05-02 08:42:16
【问题描述】:

我一直在尝试从一个对象数组中填充一个 JTable,但没有任何结果。这是填充表格的方法代码。 system.out.println 使我能够检查数据是否正确传递,以及变量中是否存在值。这是来自界面:

public void populateTable(ArrayList<Outlet> outletList, String selection){
    f = new Fourth();
    for(int i = 0; i<outletList.size(); i++){
        if(outletList.get(i).getCity().equalsIgnoreCase(selection)){
            if(outletList.get(i).getStatus().equals("ACTIVE")){

                String bar = outletList.get(i).getBarangay();
                String code = Integer.toString(outletList.get(i).getCode());
                String name = outletList.get(i).getName();


                System.out.println(bar);
                System.out.println(code);
                System.out.println(name);

                Object[] data = {bar, code, name};   

                System.out.println("DATA: " + data[0].toString()); //correct
                System.out.println("DATA: " + data[1].toString()); //correct
                System.out.println("DATA: " + data[2].toString()); //correct

                f.getDtm().addRow(data);
            }   
        }   
    } 
}

当用户从组合框中选择一个项目时调用此方法。这个面板是创建JTable之前的页面:

 cityCombobox1.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            selCity1 = cityCombobox1.getSelectedItem().toString();
            if(itr.next() == "Non-Citadel"){
                outlet.populateTable(outletList1, selCity1);
            }
        }

这是我的表格和默认表格模型的 gui 代码:

String[] columnNames = new String[]{"Barangay", "Name", "Code"};
    dtm = new DefaultTableModel(columnNames, 0);
    pjpTable = new JTable(dtm);        

    scrollPane = new JScrollPane(getPjpTable());
    tablePanel.add(new JScrollPane(getPjpTable()));

    mainFrame.add(mainPanel);
    mainFrame.add(tablePanel,BorderLayout.SOUTH);

即使来自界面的数据显示在控制台中,也只会显示表头。如果有人有关于如何正确地将数据值传递给 JTable 的解决方案,那就太棒了!

【问题讨论】:

    标签: java


    【解决方案1】:

    我认为这段代码有问题

    String[] columnNames = new String[]{"Barangay", "Name", "Code"};
        dtm = new DefaultTableModel(columnNames, 0); // here dtm is blank (No Data available at the time of Initializing.
    
        pjpTable = new JTable(dtm);      //JTable is Initialized with a Blank Data.
    

    所以,您应该在将JTable 初始化为new JTable(dtm) 之前用空白数据填充dtm

    这里您只是在更新dtm 对象而不是在将新行添加到dtm 后尝试重绘您的表格。

    f.getDtm().addRow(data);
    

    所以,当你打电话给event cityCombobox1.addActionListener

     cityCombobox1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                selCity1 = cityCombobox1.getSelectedItem().toString();
                if(itr.next() == "Non-Citadel"){
                    outlet.populateTable(outletList1, selCity1); // data is getting filled here.
                }
            }
    

    在此之后,您需要再次绘制您的Table。那么只有它会正确填充您的表格。

    还有一个建议。

    if(itr.next() == "Non-Citadel") 而不是 == 你应该使用 equals 方法。因为== 用于检查String 对象的引用,而equals 比较实际值。

    【讨论】:

      【解决方案2】:

      你摆在桌子上

      dtm = new DefaultTableModel(columnNames, 0); 
      
      pjpTable = new JTable(dtm);
      

      我猜只设置了列名,请尝试在 将其设置为表格之前填充 dtm。我不明白是什么

       f = new Fourth();
      

      意思是……

      【讨论】:

      • f = new Fourth();是包含 JTable 和 DefaultTableModel 的 gui 类。对不起!会尝试你的建议
      • 好吧,我闻起来有点像方法(populateTable)的糟糕设计。使此方法返回 String [] [] 数据使用 String [] 数据而不是对象数据,并且您可能需要在更新后将 dtm 设置为 table。
      猜你喜欢
      • 2014-03-09
      • 2013-10-11
      • 1970-01-01
      • 2017-01-25
      • 2014-05-02
      • 2017-07-28
      • 2015-06-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多