Не могу нарисовать овал, не понимаю, где ошибаюсь. Я уже провел исследование, но не нашел ответов, извините за беспокойство. Это мой простой код:
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);
}
}
хорошо, но он не отображается в JFrame.




Внутреннее содержимое 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);
}
}
ну, вы также можете добавить настраиваемую панель в панель содержимого, как он уже делает - проблема в том, что он не установил никакого размера и использует нулевой макет
Размер добавленной панели - (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);
А что происходит и чего вы ожидали? Хотя овал той же высоты и ширины на самом деле не овал ...