Не видно JComponent на JPanel - Java

Узнай цену своей работы

Формулировка задачи:

Как -то пропустил тему по изучению Swing. Ради эксперимента решил написать простенькие часы. Осталось только графику сделать. Столкнулся со следующей проблемой: создаю JPanel, на который буду помещать циферблат и стрелки (наследники JComponent). Добавляю панель во фрейм и компонентов не видно. Если добавить компоненты просто на фрейм, то все видно. Пробовал разными способами и пока не могу понять в чем причина того, что компоненты не видно на панели во фрейме. P.S. куски кода для примера. Если кто-то скажет, что тут много доделать надо.
Листинг программы
  1. package clock;
  2. import javax.swing.*;
  3. import java.awt.*;
  4. import java.awt.geom.Ellipse2D;
  5. import java.awt.geom.Point2D;
  6. public class ClockFace extends JComponent {
  7. private Point2D center;
  8. private double radius;
  9. private boolean hasMinutesLabels;
  10. public ClockFace(Point2D center, double radius) {
  11. super();
  12. this.center = center;
  13. this.radius = radius;
  14. hasMinutesLabels = false;
  15. }
  16. public ClockFace(Point2D center, double radius, boolean hasMinutesLabels) {
  17. super();
  18. this.center = center;
  19. this.radius = radius;
  20. this.hasMinutesLabels = hasMinutesLabels;
  21. }
  22. @Override
  23. protected void paintComponent(Graphics g) {
  24. Graphics2D g2 = (Graphics2D) g;
  25. g2.setStroke(new BasicStroke(2.0f));
  26. Ellipse2D ellipse = new Ellipse2D.Double(center.getX()-radius, center.getY()-radius,
  27. center.getX()+radius, center.getY()+radius);
  28. g2.draw(ellipse);
  29. }
  30. }
Листинг программы
  1. package clock;
  2. import com.sun.org.apache.regexp.internal.RE;
  3. import javax.swing.*;
  4. import java.awt.*;
  5. import java.awt.geom.Point2D;
  6. public class ClockPanel extends JPanel {
  7. //TODO: панель содержит все элементы часов и слушает изменение времени
  8. public ClockPanel() {
  9. setPreferredSize(new Dimension(300,300));
  10. // Point2D center = new Point2D.Double(getPreferredSize().width/2, getPreferredSize().height/2);
  11. ClockFace clockFace=new ClockFace(new Point2D.Double(20,20), 20);
  12. add(clockFace, BorderLayout.CENTER);
  13. }
  14. }
Листинг программы
  1. package clock;
  2. import javafx.embed.swing.JFXPanel;
  3. import javax.swing.*;
  4. import java.awt.*;
  5. import java.awt.geom.Point2D;
  6. public class ClockFrame extends JFrame {
  7. private final int DEFAULT_WIDTH = 300;
  8. private final int DEFAULT_HEIGHT = 300;
  9. public ClockFrame() throws HeadlessException {
  10. super("Clock");
  11. setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
  12. setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  13. add(new ClockPanel()); //так не работает
  14. add(new ClockFace(new Point2D.Double(20, 20), 20));//так работает
  15. }
  16. }
Листинг программы
  1. package clock;
  2. import javax.swing.*;
  3. import java.awt.*;
  4. public class Test {
  5. public static void main(String[] args) {
  6. EventQueue.invokeLater(new Runnable() {
  7. @Override
  8. public void run() {
  9. JFrame clockFrame = new ClockFrame();
  10. clockFrame.setVisible(true);
  11. }
  12. });
  13. }
  14. }

Решение задачи: «Не видно JComponent на JPanel»

textual
Листинг программы
  1. package clock;
  2.  
  3. import javax.swing.*;
  4. import java.awt.*;
  5.  
  6. public class Test {
  7.    
  8.     public static void main(String[] args) {
  9.         EventQueue.invokeLater(new Runnable() {
  10.             @Override
  11.             public void run() {
  12.                 Clock clock=new Clock();
  13.                 JFrame clockFrame = new ClockFrame();
  14.                 clockFrame.setVisible(true);
  15.                 clock.run();
  16.             }
  17.         });
  18.     }
  19. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут