/ / Малювання овалу на полотні за допомогою гойдалки - java, swing, полотно, графіка, awt

Малювання овалу в полотні за допомогою гойдалки - java, swing, canvas, graphics, awt

Я новачок у Java, і у мене проблема з нанесенням овалу методом paintComponent. Я знайшов багато подібних ниток, але жодна думка не працювала. Мій код:

import javax.swing.*;
import java.awt.*;

public class RacerMain {
public static void main (String[]args) {
//MainFrame mf = new MainFrame();
JFrame jframe = new JFrame();
JPanel jpanel = new JPanel();
jframe.setSize(480,640);
jframe.add(jpanel);
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jpanel.add(new Dot());
jframe.setVisible(true);
}

}

Dot.java

import java.awt.*;
import javax.swing.*;

public class Dot extends JComponent{
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D)g;
g2d.setColor(Color.BLUE);
g2d.fillOval(20, 20, 20, 20);
}
}

Чому він не працює і як змусити цей код працювати?

Відповіді:

2 для відповіді № 1

JPanel використовує FlowLayout який поважає бажані розміри, але розмір за замовчуванням Dot компонент занадто малий, щоб його можна було побачити. Потрібно використовувати менеджер макета, який використовує максимальну доступну площу або перевизначає getPreferredSize. Не забудьте подзвонити pack перед дзвінком JFrame#setVisible

jpanel.setLayout(new BorderLayout());

-1 для відповіді № 2

Або ви можете встановити бажаний розмір у конструкторі:

import java.awt.*;
import javax.swing.*;

public class Dot extends JComponent {
public Dot() {
setPreferredSize(new Dimension(480, 640));
}

@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.BLUE);
g2d.fillOval(20, 20, 20, 20);
}
}