Я новачок у 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 для відповіді № 1JPanel
використовує 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);
}
}