Проблема в том, что когда я изменяю размер JFrame, JPanels сокращается, а Canvas расширяется,
Хорошо, вы говорите нам, что происходит, но вы не сказали нам, что вы ОЖИДАЕТЕ, что должно произойти.
Я думаю, проблема в том, как вы используете весомые ограничения.
Исходя из предоставленного кода, я бы предложил, чтобы вы НЕ использовали GridBagLayout, а вместо этого использовали BorderLayout
.
Тогда код для добавления панелей к фрейму будет просто:
add(followTo, BorderLayout.PAGE_START);
add(canvas, BorderLayout.CENTER);
add(controls, Borderlayout.PAGE_END):
Теперь, когда размер кадра изменится, все пространство будет отдано компоненту в ЦЕНТРЕ. Компоненты сверху / снизу останутся фиксированными по высоте.
Обратите внимание, что вы также НЕ должны использовать переменные stati c в своем коде.