是否可以使用for循环将字符串数组插入jtable

Is it possible to Insert a string array into jtable using for loop

我遇到了一个麻烦,我无法将字符串数组插入到 jTable 中。场景是我在一个数组中有一些选择的值,我想把那个值插入到jTable中。

我的代码在这里:

import java.util.Arrays;
import java.util.Vector;
import javax.swing.table.DefaultTableModel;


public class as extends javax.swing.JFrame {


public as() {
    initComponents();
}


@SuppressWarnings("unchecked")

private void initComponents() {

    jScrollPane1 = new javax.swing.JScrollPane();
    t1 = new javax.swing.JTable();
    jScrollPane2 = new javax.swing.JScrollPane();
    t2 = new javax.swing.JTable();
    jButton1 = new javax.swing.JButton();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    t1.setModel(new javax.swing.table.DefaultTableModel(
        new Object [][] {
            {"122", "a", null, null},
            {"123", "b", null, null},
            {"124", "c", null, null},
            {"125", "d", null, null},
            {"126", "e", null, null}
        },
        new String [] {
            "Title 1", "Title 2", "Title 3", "Title 4"
        }
    ));
    jScrollPane1.setViewportView(t1);

    t2.setModel(new javax.swing.table.DefaultTableModel(
        new Object [][] {

        },
        new String [] {
            "Title 1", "Title 2"
        }
    ));


private void jButton1MouseReleased(java.awt.event.MouseEvent evt) {                                       
    // TODO add your handling code here:

            Vector R_D=new Vector();

    if(t1.getRowCount()>0){
        String[] ary = new String[t1.getRowCount()];
        try{
            for(int i=0;i<t1.getRowCount();i++){                
                R_D.add(t1.getValueAt(i, 0).toString());
                ary[i]=t1.getValueAt(i, 0).toString();
                System.out.println(Arrays.toString(ary)+i);
                ((DefaultTableModel) t2.getModel()).addRow(ary);  

            }
        }
        catch(Exception d)
            {System.out.println(d.getMessage());}


    }
}                                      

/**
 * @param args the command line arguments
 */
public static void main(String args[]) {        

    /* Create and display the form */
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new as().setVisible(true);
        }
    });
}

// Variables declaration - do not modify                     
private javax.swing.JButton jButton1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JTable t1;
private javax.swing.JTable t2;
// End of variables declaration                   

我在名为 ary[] 的数组中找到了正确答案。

我需要将所有数组值复制到单独的 jTable 行中。

但结果以一些空 table 结尾,没有显示任何错误

只看裁剪的屏幕截图

这是table已选择的员工列表。

点击创建考勤列表按钮后,结果为

table 看起来像这样。

但我需要一个看起来像这样的结果

请帮助我。

that I can't insert a string array into a jTable.

好吧,我没有看到您尝试这样做的任何代码。

首先阅读 DefaultTableModel API。您可以使用您的数据轻松创建 DefaultTableModel。您可以:

  1. 创建一个空的 DefaultTableModel,然后使用 addRow(...) 方法在循环中添加一行。

  2. 您可以创建一个包含所需行数的 DefaultTableModel。然后就可以用setValueAt(...)的方法改变每一行的数据了

如果您需要更多帮助,那么 post 一个适当的 SSCCE 来证明您遇到的问题。

编辑:

一个 SSCCE 的示例,它在按下按钮时简单地将一行数据添加到 table。该代码创建一个包含两个值的数组,然后调用 DefaultTableModel 的 addRow(...) 方法。

import java.awt.*;
import java.beans.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;

public class TableRowColumn2 extends JFrame
{
    private final static String LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    JTable table;
    DefaultTableModel model;
    JPanel buttonPanel;
    JButton button;

    public TableRowColumn2()
    {
        //  Create table

        Object[][] data =
        {
            {new Integer(1), "A"},
            {new Integer(2), "B"},
            {new Integer(3), "C"}
        };
        String[] columnNames = {"Number","Letter"};
        model = new DefaultTableModel(data, columnNames);
        table = new JTable(model)
        {
            public boolean isCellEditable(int row, int column)
            {
                return true;
            }
        };

        table.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
        table.setPreferredScrollableViewportSize(table.getPreferredSize());
        table.changeSelection(0, 0, false, false);
        table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);

        table.getColumnModel().getColumn(0).setCellRenderer( table.getDefaultRenderer(Integer.class) );

        //  Add table and a Button panel to the frame

        final JScrollPane scrollPane = new JScrollPane( table );
        getContentPane().add( scrollPane, BorderLayout.CENTER );

        buttonPanel = new JPanel();
        getContentPane().add( buttonPanel, BorderLayout.NORTH );

        button = new JButton( "Add Row" );
        button.setMnemonic('A');
        buttonPanel.add( button );
        button.addActionListener( new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                model.addRow( createRow() );
                int row = table.getRowCount() - 1;
                table.changeSelection(row, 0, false, false);
                table.requestFocusInWindow();
            }
        });

    }

    private Object[] createRow()
    {
        Object[] newRow = new Object[2];
        int row = table.getRowCount();
        newRow[0] = Integer.toString(row + 1);
        row = (row % 26) + 1;
        newRow[1] = LETTERS.substring(row-1, row);
        return newRow;
    }

    public static void main(String[] args)
    {
        TableRowColumn2 frame = new TableRowColumn2();
        frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
        frame.pack();
        frame.setLocationRelativeTo( null );
        frame.setVisible(true);
    }
}

在您的情况下,您需要获取每个选定的行。然后对于每一行,您将:

  1. 为要复制的数据创建一个数组。
  2. 然后调用第二个 TableModel 的 addRow(...) 方法

所以基本上您需要更改 ActionListner 中的代码以添加一个循环来执行上述两个步骤。

您可以使用此方法将 String[] 添加到 JTable:

首先您必须获取模型,然后您必须添加 String[]:

((TableModel) Tbl_To.getModel()).addRow(Ary);

使用此方法,您选择的数据在 JTable 中位于一行中。

我终于找到了实现目标的窍门.. 我创建了一个虚拟数组,然后在插入行 data.After 之前调用数组值,我使用 setValues 来设置 mystring array.Thats 的值,我的意思是什么。

这是我编辑的代码

    Vector R_D=new Vector();

    if(Tbl_AddAttTo.getRowCount()>0){
        String[] Dary = {"nil","nil","nil","nil"};
        String[] ary = new String[Tbl_AddAttTo.getRowCount()];
        try{
            for(int i=0;i<Tbl_AddAttTo.getRowCount();i++){                
                R_D.add(Tbl_AddAttTo.getValueAt(i, 0).toString());
                ary[i]=Tbl_AddAttTo.getValueAt(i, 0).toString();

               ((DefaultTableModel) Tbl_Exp_Mgr1.getModel()).addRow(Dary);
                Tbl_Exp_Mgr1.setValueAt(ary[i], i, 0);

            }
        }
        catch(Exception d)
            {System.out.println(d.getMessage());}
    }