Не могу нарисовать овал в Java

Не могу нарисовать овал, не понимаю, где ошибаюсь. Я уже провел исследование, но не нашел ответов, извините за беспокойство. Это мой простой код:

public class Ball extends JPanel{


    public void paint(Graphics g) {
        g.drawOval(100, 100, 50, 50);
    }

    public static void main(String[] args) {
        JFrame game = new JFrame("Ball game!");
        game.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        game.setResizable(false);
        game.setLayout(null);
        game.setSize(300, 550);
        game.setLocation(400, 200);

        Ball d = new Ball();

        game.add(d);
        game.setVisible(true);
    }

}

А что происходит и чего вы ожидали? Хотя овал той же высоты и ширины на самом деле не овал ...

f1sh 25.06.2018 15:39

хорошо, но он не отображается в JFrame.

Ludovico 25.06.2018 15:40
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
54
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Внутреннее содержимое JFrame - это его панель содержимого. Вы можете просто установить панель содержимого фрейма на панель, которую вы хотите нарисовать, с помощью JFrame.setContentPane (). Тогда ваша панель будет показана.

public class Ball extends JPanel{

    public void paint(Graphics g) {
        g.drawOval(100, 100, 50, 50);
    }

    public static void main(String[] args) {
        JFrame game = new JFrame("Ball game!");
        game.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        game.setResizable(false);
        game.setLayout(null);
        game.setSize(300, 550);
        game.setLocation(400, 200);

        Ball d = new Ball();

        game.setContentPane(d); // <- this line
        game.setVisible(true);
    }

}

ну, вы также можете добавить настраиваемую панель в панель содержимого, как он уже делает - проблема в том, что он не установил никакого размера и использует нулевой макет

user85421 25.06.2018 16:44

Размер добавленной панели - (0, 0), поскольку вы не используете Менеджер компоновки (game.setLayout(null)) и не устанавливаете ее размер.

В этом случае вы должны установить позицию и размер любого добавленного Компонента:

Ball d = new Ball();
d.setLocation(0,0);
d.setSize(300, 500);

или просто используйте Диспетчер макетов, например по умолчанию - BorderLayout для JFrame - и добавленная панель займет всю область:

game.setResizable(false);
// game.setLayout(null);
game.setSize(300, 550);

Другие вопросы по теме