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