В настоящее время пытаюсь сделать графические c часы в JAVA, я имею дело с проблемой "связи" между элементами. Действительно, моя архитектура видна снизу и состоит из 3 классов:
Ящик используется в качестве «контейнера» путем группировки различных элементов, которые касается данных (класс часов, который позволяет хранить только текущее время) и графиков c (JFrame, а также clockPanel).
ClockPanel - это класс, который должен позволять рисовать часы (для в тот момент, когда я смог нарисовать элементы stati c, как показано ниже).
Моя проблема заключается в том, как передать данные часов в ClockPanel, чтобы нарисовать стрелки часов.
Я думал о передаче часов ClockPanel, но кажется довольно очевидным, что это не решение, которое выберет, оно сделает ящик бесполезным.
Так что я не вижу, как сделать связь между этими двумя элементами. Я стараюсь быть настолько чистым, насколько это возможно, чтобы приобрести наилучшие возможные рефлексы на будущее.
Некоторое время я думал, что моя нынешняя структура совершенно неверна, что вызывает мою проблему.
Ниже приведены фрагменты кода из ящика и функция paintComponent для ClockPanel:
public void initDraw() {
clockWindow = new JFrame();
clockWindow.setTitle(getTitle());//Définit un titre pour notre fenêtre
clockWindow.setSize(getSize(), getSize());//Définit sa taille, elle sera carrée car deux fois size en W et H
clockWindow.setLocationRelativeTo(null);//Nous demandons maintenant à notre objet de se positionner au centre
clockWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Termine le processus lorsqu'on clique sur la croix rouge
clockWindow.setResizable(false);//L'utilisateur ne peux pas redimensionner la fenetre
clockWindow.setVisible(true);//Et enfin, la rendre visible
clockPanel = new ClockPanel(m_clock);
clockWindow.setContentPane(clockPanel);
}
public void paintComponent(Graphics g){
super.paintComponent(g);
m_radiusWhiteCircle = (getWidth()/2)-40; //on prend un rayon qui va donner un cercle qui prend quasiment toute la fenetre
m_centerX = m_centerY = getWidth()/2; //dans le contexte actuel, la fenetre est carrée, donc qu'on prenne widh ou height c'est pareil (a separe en deux opération si on change)
System.out.println(getHeight());
this.setBackground(new Color(160, 196, 235)); //on défini le fond du JPanel
g.setColor(Color.BLACK);// le prochaine cercle sera noir
int[] blackCircleSquare = convertCircleCoordsToSquareCoords(m_centerX, m_centerY, m_radiusWhiteCircle + 10); //on convertit les coordonées de notre cercle afin d'obtenir ceux du coin gauche du carré qui va contenri notre cerle
g.fillOval(blackCircleSquare[0],blackCircleSquare[1],blackCircleSquare[2],blackCircleSquare[2]);//On dessine le contour de l'horlorge en prenant le centre de la fenetre et un rayon un peu supérieur au cercle "principal"
g.setColor(Color.WHITE);//le prochain cercle sera blanc
int[] whiteCircleSquare = convertCircleCoordsToSquareCoords(m_centerX, m_centerY, m_radiusWhiteCircle);
g.fillOval(whiteCircleSquare[0],whiteCircleSquare[1],whiteCircleSquare[2],whiteCircleSquare[2]);
g.setColor(Color.GREEN);
int[] greenCircleSquare = convertCircleCoordsToSquareCoords(m_centerX, m_centerY, 10);
g.fillOval(greenCircleSquare[0],greenCircleSquare[1],greenCircleSquare[2],greenCircleSquare[2]);
g.setColor(Color.RED);
g.setFont(new Font("TimesRoman", Font.PLAIN,20));
for(int i=1;i<=12;i++) {
int xHour = (int)(m_centerX+(m_radiusWhiteCircle-15)*Math.cos(i*INVARIABLE_ANGLE_HOUR - INVARIABLE_DECALAGE));
int yHour = (int)(m_centerY+(m_radiusWhiteCircle-20)*Math.sin(i*INVARIABLE_ANGLE_HOUR - INVARIABLE_DECALAGE));
g.drawString(String.valueOf(i),xHour,yHour);
}
}