установите для массива String имена столбцов jtable, а для данных Apache poi excel - JTable. - PullRequest
0 голосов
/ 23 сентября 2018
 jTable1.setModel(new javax.swing.table.DefaultTableModel(
    new Object [][] {
        {null, null, null},
        {null, null, null},
          },
    new String [] {
        class2.columnName[0],class2.columnName[1],class2.columnName[2]                    
    }
));

Массив имен столбцов В классе 2:

static String[] columnName={"Name", "data" , "data2"};

Я хочу установить 3 имени столбца в JTableJTable из String [] String [] Columns.Я сделал это, используя индексный номер массива с жестким кодированием: но если у меня есть сотни значений в массиве, то как я могу установить имена столбцов jtable, используя значения массива, не используя жестко закодированные индексные номера массива, но используя любой другой менее типизированный способ

Ответы [ 2 ]

0 голосов
/ 23 сентября 2018

Если массив никогда не изменяется любым способом, и вы хотите использовать весь массив, тогда вы можете использовать ссылку на массив напрямую:

jTable1.setModel(new javax.swing.table.DefaultTableModel(
    new Object [][] {
        {Readsheet.Stringvalue, Readsheet.Stringvalue, Readsheet.Stringvalue},
        {Readsheet.Stringvalue, Readsheet.Stringvalue, Readsheet.Stringvalue},

    },
    Writesheet.Columns // <-- Array reference
));

Если массив можно изменить, вы можете создать копию всего массива . Есть много способов сделать это , мои личные предпочтения Arrays.copyOf:

    Arrays.copyOf(Writesheet.Columns, Writesheet.Columns.length) // <-- Copy of the entire array

Если вам нужна только непрерывная часть массива, вы можетесоздайте копию фрагмента массива :

    Arrays.copyOfRange(Writesheet.Columns, 0, 3) // <-- Copy of a part of the array, indexes from 0 to 2

Наконец, если вам нужно извлечь элементы по отдельным несмежным индексам ине нужно многократно набирать Writesheet.Columns[...], вы можете использовать поток индексов и извлекать значения, используя Stream.map():

    IntStream.of(0, 1, 2) // <-- Indexes here
        .mapToObj(i -> Writesheet.Columns[i]).toArray()

Update: для объединения полученного массива в строку с использованием , в качестве разделителя:

    IntStream.of(0, 1, 2) // <-- Indexes here
        .mapToObj(i -> Writesheet.Columns[i]).collect(Collectors.joining(","))
0 голосов
/ 23 сентября 2018
new String[]{Writesheet.Columns[0], Writesheet.Columns[1], Writesheet.Columns[2]}

может быть заменено ссылкой на массив

Writesheet.Columns

, а

{Readsheet.Stringvalue, Readsheet.Stringvalue, Readsheet.Stringvalue}

может быть заменено на

Stream.generate(() -> Readsheet.Stringvalue).limit(3).toArray(String[]::new)

, которое может бытьобобщается в метод

public static <T> T[] generateArrayFromElement(T element, int size, IntFunction<T[]> arrayGeneratorFunction) {
    return Stream.generate(() -> element)
                 .limit(size)
                 .toArray(arrayGeneratorFunction);
}
...
generateArrayFromElement(Readsheet.Stringvalue, 3, String[]::new);

(мы генерируем бесконечный поток из одного элемента, ограничиваемся до требуемого размера и собираем в массив)

или

public static <T> T[] generateArrayFromElement2(T element, T[] array) {
    Arrays.fill(array, element);
    return array;
}
...
generateArrayFromElement2(Readsheet.Stringvalue, new String[3]);

(мы заполняем данный массив одним элементом и возвращаем его)

...