Для Swing вам нужно переопределить paintComponent()
, а не paint()
.Вы рисуете прямо на контейнере верхнего уровня.Рассмотрите возможность использования JPanel.переопределить paintComponent
JPanel.
РЕДАКТИРОВАТЬ
После прочтения вашего отзыва, я думаю, что вам нужно сделать следующее:
Во-первых, несколько моментов, которые следует запомнить:
JFrame не является подклассом JComponent.Так что он не имеет paintComponent (). И рисовать не следует с Swing.Так что вам нужно сделать что-то другое.
Как и все контейнеры верхнего уровня, JFrame
также определяет количество панелей, в верхней части которых находится JRootPane
.JRootPane.до glass pane
, content pane
и layered pane
.Обычно мы просто создаем класс, который расширяет такой компонент, как JPanel.В этом классе мы переопределяем метод paintComponent()
, и вот как мы рисуем вещи. Затем мы просто добавляем его в панель содержимого JFrame
.
Но что вам нужно сделать?создать класс, который расширяет JComponent
.Там переопределите метод paintComponent () всем, что вы хотите нарисовать.Теперь в вашем классе (который расширяет JFrame) установите contentPane, используя setContentPane
как класс, который вы только что создали, расширяющий JComponent.Структура setContentPane
имеет вид
public void setContentPane(Container contentPane)
Таким образом, вы можете передать объект класса, который расширяет JComponent
, поскольку JComponent
является подклассом контейнера.
Что вы сделалипросто установить макет панели содержимого после использования getContentPane
.Но вам также нужно настроить его так, чтобы он вел себя так, как вы этого хотите.Обычно мы этого не делаем, потому что добавляем компоненты на панель контента напрямую, используя add()
.Я надеюсь, что это сработает.