Как сделать JTable изменить размер как Windows? - PullRequest
0 голосов
/ 06 марта 2019

Я делаю заявку в Eclipse с Swing и JFreechart, и у меня есть следующая проблема:

Screenshot

Как вы можете видеть на скриншотеУ меня есть рамка с несколькими компонентами.Проблема в JTable, который всегда имеет одинаковый размер, независимо от того, изменяю ли я размер окна.Я хочу, чтобы размер таблицы изменялся так же, как это делают другие компоненты, например, ChartPanel справа, и я не знаю, как это сделать.У contentPane есть BorderLayout с тремя панелями:

  • Панель прокрутки для JTable (WEST)
  • Панель ChartPanel (CENTER)
  • Панель для кнопок (ЮГ)

Код для создания JTable:

private JTable getTasksTable() {
    if (tasksTable == null) {
        tasksTable = new JTable(new DefaultTableModel(new Object[] { "ID", "Duration", "Due-Date" }, 0) {

            private static final long serialVersionUID = 1L;

            @Override
            public boolean isCellEditable(int row, int column) {
                return false;
            }

        });

        DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer();
        centerRenderer.setHorizontalAlignment(SwingConstants.CENTER);
        for (int i = 0; i < tasksTable.getColumnModel().getColumnCount(); i++) {
            tasksTable.getColumnModel().getColumn(i).setCellRenderer(centerRenderer);
        }

        tasksTable.getTableHeader().setDefaultRenderer(centerRenderer);
        tasksTable.getTableHeader().setBorder(new LineBorder(new Color(0, 0, 0)));

        tasksTable.setBorder(new LineBorder(new Color(0, 0, 0)));
        tasksTable.setFillsViewportHeight(true);
    }
    return tasksTable;
}

1 Ответ

1 голос
/ 06 марта 2019

Панель прокрутки для JTable (WEST), ChartPanel (CENTER), Панель для кнопок (SOUTH)

Что ж, BorderLayout работает так:

  1. Компоненты в WEST / EAST имеют размер в соответствии с предпочтительной шириной компонента.
  2. Компонент в CENTER получает оставшуюся ширину.

Таким образом, в вашем случае полоса прокрутки имеет фиксированную ширину, а ширина панели диаграммы меняется.

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

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

Прочитайте раздел из учебника по Swing на Как использоватьGridBagLayout для получения дополнительной информации об ограничениях и рабочих примерах для начала работы.

...