По хорошему, с точки зрения архитектуры, вам не нужно прокидывать комбобокс в TransformingCanvas, потому что его задача заключается в отрисовке изображений. Но откуда изображения берутся это уже второй вопрос. Я бы ввел какой нибудь интерфейс, например:
public interface ImageProvider {
Image getImage();
}
В TransformingCanvas завел бы поле ImageProvider и сеттер для него. При нажатии на кнопку вы устанавливаете через сеттер соответствующую реализацию ImageProvider
При отрисовке TransformingCanvas должен брать изображение из ImageProvider. Остается один вопрос: как оповестить TransformingCanvas об изменении изображения и о необходимости перерисовки? Способов решения много. Самый простой: в сеттере для ImageProvider явно вызывать перерисовку TransformingCanvas. Можно также через слушателя, регистрируемого в ImageProvider.
p.s. И еще. Я не знаю конечно специфики вашего TransformingCanvas, но в общем случае лучше переопределять не метод JComponent.paint(Graphics g), а JComponent.paintComponent(Graphics g) Метод paint определяет весь алгоритм рисования компонента, включая его границу и его дочерние компоненты, в то время как paintComponent рисует только сам компонент. Переопределив paint, вам придется самому заморачиваться с рисованием дочерних компонентов, если конечно это потребуется. Почитайте документацию в этим методам, там все описано.