Не видно 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(); } }); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д