как мне заполнить JTable, повторяя цикл for, имеющий значения массива

1

Изображение 174551

Я хочу достичь внешнего вида, как на изображении выше.

Вот код, который я написал, но я не знаю, как сделать его похожим на эту таблицу.

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.FlowLayout;
import java.io.File;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JFrame;

import static javax.swing.JFrame.EXIT_ON_CLOSE;

import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;
import javax.xml.crypto.Data;

import com.cdac.FileNameCopy;

class TableCheckBox extends JFrame {

    private static final long serialVersionUID = 1L;
    private JTable table;

    public void TableCheckBoxfunc(String fileName,String Ext,boolean selection) 
    {
        Object[] columnNames = {"File Names", "Extentions","Selection"};
        Object[][] data = { {fileName,Ext,selection}};

        DefaultTableModel model = new DefaultTableModel(data, columnNames);
        table = new JTable(model) {

          @Override
            public Class getColumnClass(int column) {
                switch (column) {
                    case 0:   return String.class;
                    case 1:   return String.class;
                    default:  return Boolean.class;
                }
            }
        };

        Container c = getContentPane();
        c.setLayout(new FlowLayout());
        c.add(new JScrollPane(table), BorderLayout.CENTER);


        table.setPreferredScrollableViewportSize(table.getPreferredSize());
        JScrollPane scrollPane = new JScrollPane(table);
        getContentPane().add(scrollPane);


        return ;
    }

    public static void main(String[] args) 
    {

        boolean selection=false;
        String fileName="";
        String extension="";


        File folder = new File("c:\\file");
        File[] listOfFiles = folder.listFiles();


        TableCheckBox frame = new TableCheckBox();

        for (int i = 0; i < listOfFiles.length; i++) 
        {
              if (listOfFiles[i].isFile()) {

                  final String fullName=listOfFiles[i].getName();
                  int a = fullName.lastIndexOf(".");
                  int len=fullName.length();

                  fileName=fullName.substring(0,a);
                  extension=fullName.substring(a+1,len);

                  System.out.println("name of file is :"+fileName);
                  System.out.println("Extension of file is :"+extension);




                System.out.println("File " + fullName);
              } else if (listOfFiles[i].isDirectory()) {
                System.out.println("Directory " + listOfFiles[i].getName());
              }
              frame.TableCheckBoxfunc(fileName, extension, selection);
                // frame.TableCheckBoxfunc(fileName, extension, selection);;
              frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
              frame.pack();
              frame.setLocation(150, 150);
              frame.setVisible(true);
        }

    }
}
Теги:
file-io
swing
jtable

2 ответа

1

Прежде всего заполните данные модели Object[][] затем добавьте ее в DefaultTableModel и создайте JTable только один раз.

Образец кода:

Object[][] data = new Object[listOfFiles.length][3];
for (int i = 0; i < listOfFiles.length; i++) {
    ...
    data[i][0] = fileName;
    data[i][1] = extension;
    data[i][2] = selection;
}

Object[] columnNames = { "File Names", "Extentions", "Selection" };
DefaultTableModel model = new DefaultTableModel(data, columnNames);
// create JTable just once and pass model in the constructor

Как использовать таблицы? выучить больше...

1

Это будет очень полезно. http://docs.oracle.com/javase/tutorial/uiswing/components/table.html

То, что я не понимаю в вашем коде, это

Object[][] data = { {fileName,Ext,selection}};

Я бы ожидал чего-то подобного

Object[][] data = {
    {"S001", "Alice", 90, true}
    //...more rows
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню