Отображение прокручиваемого JTable - PullRequest
0 голосов
/ 26 мая 2019

У меня проблемы с отображением прокручиваемой JTable в моей панели содержимого, таблица должна находиться под меткой, но ничего не отображается. Однако когда я удаляю scrollPane, отображается таблица. Without scrollPaneWith scrollPane

public void populateJTable(int resultCount, String[] closeNames, String[] closeCities) {
        String[] columnTitles = {"Brewery", "City"}; 
        String[][] data = new String[resultCount][columnTitles.length];

        for(int i = 0; i < closeNames.length; i++) {
            String tempBrewery = closeNames[i];
            String tempCity = closeCities[i];
            data[i][0] = tempBrewery;
            data[i][1] = tempCity;
        }

        table = new JTable(data, columnTitles);
        table.setBounds(20, 95, 580, 250);

        JScrollPane scrollPane = new JScrollPane(table);
        table.setFillsViewportHeight(true);
        contentPane.add(scrollPane); 

    }

1 Ответ

1 голос
/ 26 мая 2019

Однако, когда я удаляю scrollPane, отображается таблица.

table.setBounds(20, 95, 580, 250);

Исходя из приведенного выше кода, похоже, что вы используете нулевой макет, так как вы видите таблицу,

Однако, когда вы добавляете таблицу в область прокрутки, область прокрутки не имеет размера, поэтому рисовать нечего.

Не используйте пустой макет !!!

Swing был разработан для использования с менеджерами компоновки.Узнайте, как их использовать, и код будет легче кодировать и работать лучше.

    JScrollPane scrollPane = new JScrollPane(table);
    table.setFillsViewportHeight(true);
    contentPane.add(scrollPane); 

Так что теперь, когда вы начинаете использовать менеджеры компоновки и добавляете компонент в видимый графический интерфейс, вам нужно revalidate() иrepaint () `панель, которая изменилась для вызова менеджера компоновки на панели.Поэтому вам нужно добавить:

contentPane.revalidate();
contentPane.repaint();

Однако лучшее решение - НЕ продолжать создавать новые JTable и JScrollPane.Вместо этого вы можете создать эти компоненты при создании фрейма и добавить их в фрейм.

Затем, когда вы выполняете поиск, вы просто создаете новую TableModel с результатами поиска, а затем обновляете таблицу с помощью:

table.setModel( .... );

Таблица перекрасится автоматически.

...