繁体   English   中英

使用arrayList值将行值填充到SWING JTable JAVA中

[英]Fill row values to SWING JTable JAVA using an arrayList values

我想根据arrayList数据向J​​Table动态添加和填充行。 JTable列标题是固定的。 例如:3根据列数,应逐行显示。

这里values1是一个arrayList。 它包含所有行数据值。

values2是另一个数组列表,用于根据列数提取行值。

for (int v = 0; v < values1.size(); v++) {

            values2.add(values1.get(v));
        }

我使用此代码向JTable添加行。

       Object jFill[] = values2.toArray();

        model.addRow(jFill);

由于列数为3,它将仅填充第一行(水平3个单元格)。如何根据values2内的值填充其他数据以增加行数。

谢谢。

尝试以下操作,遍历列表并将每三个值放在一行中(如果您有3列):

 int counter=0;
 for (int v = 0; v < values1.size(); v++) {
    if(counter<3){
      values2.add(values1.get(v));
      counter++;
    }
    if(counter==3||v>=values1.size){
      Object jFill[] = values2.toArray();
      model.addRow(jFill);
    }

 }

在这里,我可以使用的完整工作表模型可以运行,您可以添加行,删除行并更改值。

您可以轻松地添加到框架:

    protected MyTableModel mytableModel = new MyTableModel();
    scroll = new JScrollPane(mytableModel);

表类:

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionEvent;

import javax.swing.AbstractAction;
import javax.swing.DefaultListSelectionModel;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableCellRenderer;

import org.apache.poi.ss.usermodel.Header;

class MyTableModel extends JPanel   {



    private static final int CHECK_COL = 5;
    private static  Object[][] DATA = { };
    public static String[] COLUMNS = {"Col1","Col2","Col3","Col4","Col5", "Checkbox"};
    protected DataModel dataModel = new DataModel(DATA, COLUMNS);
    private JTable table = new JTable(dataModel);
    private DefaultListSelectionModel selectionModel;

    public MyTableModel(){
        super(new BorderLayout());
        this.add(new JScrollPane(table));
        this.add(new ControlPanel(), BorderLayout.SOUTH);
        table.setPreferredScrollableViewportSize(new Dimension(250, 175));
        selectionModel = (DefaultListSelectionModel) table.getSelectionModel();
        JTableHeader header = table.getTableHeader();
        header.setDefaultRenderer(new HeaderRenderer(table));
    }


    private class DataModel extends DefaultTableModel {


        public DataModel(Object[][] data, Object[] COLUMNS) {
            super(data, COLUMNS);
        }

        @Override
        public Class<?> getColumnClass(int columnIndex) {
            if (columnIndex == CHECK_COL) {
                return getValueAt(0, CHECK_COL).getClass();
            }
            return super.getColumnClass(columnIndex);
        }

        @Override
        public boolean isCellEditable(int row, int column) {
            if(column==CHECK_COL && !Main.checked)
                return true;
            return false;
        }

    }
    private static class HeaderRenderer implements TableCellRenderer {

        DefaultTableCellRenderer renderer;

        public HeaderRenderer(JTable table) {
            renderer = (DefaultTableCellRenderer)
                table.getTableHeader().getDefaultRenderer();
            renderer.setHorizontalAlignment(JLabel.CENTER);
        }

        @Override
        public Component getTableCellRendererComponent(
            JTable table, Object value, boolean isSelected,
            boolean hasFocus, int row, int col) {
            return renderer.getTableCellRendererComponent(
                table, value, isSelected, hasFocus, row, col);
        }
    }

    private class ControlPanel extends JPanel {

        /**
         * 
         */
         private static final long serialVersionUID = -7342459414751761853L;

        public ControlPanel() {
            //   this.add(new JLabel("Selection:"));
            //  this.add(new JButton(new SelectionAction("Clear", false)));
            //    this.add(new JButton(new SelectionAction("Check", true)));
        }
    }



    private class SelectionAction extends AbstractAction {

        boolean value;

        public SelectionAction(String name, boolean value) {
            super(name);
            this.value = value;
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            for (int i = 0; i < dataModel.getRowCount(); i++) {
                if (selectionModel.isSelectedIndex(i)) {

                    dataModel.setValueAt(value, i, CHECK_COL);
                }
            }
        }
    }



    public void setValueAt_Cell(String val, int row, int col) {
        // TODO Auto-generated method stub
        if(row>=dataModel.getRowCount()){
            dataModel.addRow(new Object[] {"","","","","",false});

        }
        dataModel.setValueAt(val, row, col);
    }



    public String getValAtPos(int row,int col) {
        //System.out.println(dataModel.getValueAt(row, col));
        if(row>=dataModel.getRowCount()){
            return null;
        }
        return dataModel.getValueAt(row, col).toString();
    }

    public int getRowCount(){
        return DATA.length;
    }
    public boolean get_checked_row(int row){
        return (boolean) dataModel.getValueAt(row, 5);
    }



    public void clear() {
        while(dataModel.getRowCount()!=0){
            for(int i=0;i<dataModel.getRowCount();i++){
                dataModel.removeRow(i);     
            }
            dataModel.fireTableRowsDeleted(0, getRowCount());
            dataModel.fireTableDataChanged();
        }
    }


}

这是一个使用数组而不是arraylist的简单实现,并支持动态添加列(如果对代码进行细微调整,则可以动态添加行):

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

public class Test {
  public static void main(String[] argv) throws Exception {
    DefaultTableModel model = new DefaultTableModel();
    JTable table = new JTable(model);
    model.addColumn("Header");

    String[] headers = { //If you wish to separate the headers array from columns array
        "Header 1",
        "Header 2",
        "Header 3"
    };
    String [][]columnData = new String[][]{
        {
            "Column 1.1",
            "Column 1.2",
            "Column 1.3"
        },{
            "Column 2.1",
            "Column 2.2",
            "Column 2.3"
        },{
            "Column 3.1",
            "Column 3.2",
            "Column 3.3"
        }
    };

    for(int col=1;col<(columnData.length+1);col++){
        model.addColumn("Col"+col);
    }
    for(int i=0;i<headers.length;i++){
        model.addRow(new Object[] { headers[i] });
    }
    for(int r=0;r<columnData.length;r++){
        for(int c=0;c<columnData[0].length;c++){
            model.setValueAt(columnData[r][c],c,r+1);
        }
    }        
    JFrame f = new JFrame();
    f.setSize(500, 300);
    f.add(new JScrollPane(table));
    f.setVisible(true);
  }
}

您可以将数据库的数据抽取代码添加到硬编码数组中。

屏幕截图:

在此处输入图片说明

暂无
暂无

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

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