Bin Ratlos bzgl Malen in Swing

Java_RY

Mitglied
Hallo Zusammen, ich bitte euch mir kurz auf die Sprünge zu Helfen.

Ich habe von MVC Modell erfahren, hab mir das mal angesehen und wollte dies in meiner jetzigen Aufgabe anwenden.
Es geht darum eine Analoge Uhr zu bauen.
Ihr müsst euch das so vorstellen dort wo die Stunden sind, ist je ein kleine Kugel.
Darunter ist eine weitere Kugel der die Minuten darstellen soll und
darunter wieder eins das die Sekunden anzeigt.
Also hab ich 12 Kugeln die die Stunden Markieren
jeweils 60 Kugeln die die Minuten und Sekunden Anzeigen.
Was hab ich bis jetzt.
Die x und y Positionen der jeweiligen kugeln habe ich in jeweils ein 2D in Array gepackt.
Was hab ich bis jetzt.
ich habe mir drei packages erstellt und in diesen jeweils die klassen zusammengefasst.

com.analogclock1
clockMain.java <-- Meine main klasse bis jetzt noch leer.

com.analogclock1.model
RandomNumber.java <--gibt mir eine zufällige Zahl aus
RandomColor.java <-- holt drei Zufallszahlen und baut daraus eine neue Farbe
clockModel.java sieht folgendermaßen aus
Java:
package org.analogclock1.model;
import java.awt.Color;
import java.text.SimpleDateFormat;
import java.util.Calendar;

public class clockModel
{
   /*
    * Dimensionen der Frame in einzelnen werte aufgeteilt.
    * @param frameHeight ist die höhe der Frame unserer Uhr.
    * @param frameWidth ist die Breite der Frame unserer Uhr.
    *
    * Koordinaten des Mittelpunktes.
    * @param circleCenterX ist die hälfte von frameWidth.
    * @param circleCenterY ist die hälfte von frameHeight.
    *
    * Der Radius unserer Uhr
    * @param circleRadius
    *
    * Farbe unserer Stunden Minuten Sekunden Anzeiger wechselt stündlich,
    * minutlich durch Zufall Generierte Farben.
    * @param circleColorHours --> wechselt bei jeder 60. minute
    * @param circleColorMinutes -->wechselt jeder 60. minute
    * @param circleColorSeconds -->wecheslet jeder 60.sekunde.
    *
    * RandomColor generiert zufällige Farben
    *
    */
   private int circleCenterX, circleCenterY, circleRadius, frameHeight, frameWidth;
   private int degreeHours, degreeMinSec, hours, minutes;
   private double[][] dimensionHours, dimensionMinutes, dimensionSeconds;
   private double x, y;
   private Color circleColorHours, circleColorMinutes, circleColorSeconds;
  
   RandomColor rdc = new RandomColor();
  
   public clockModel()
   {
     setFrameDimension();
     setCircleCenter();
     setDegreeHours();
     setDegreeMinSec();
     setCircleRadius();
     setDimensionHours();
     setDimensionMinutes();
     setDimensionSeconds();
     setCircleColorHours();
     setCircleColorMinutes();
     setDimensionSeconds();
     setTime();
    
   }

  
   public void setFrameDimension()
   {
     this.frameHeight=400;
     this.frameWidth=400;
   }
  
   public void setCircleCenter()
   {
     this.circleCenterY = this.frameHeight / 2;
     this.circleCenterX = this.frameWidth / 2;

   }

   public void setDegreeHours()
   {
     this.degreeHours = 360 / 12;
   }

   public void setDegreeMinSec()
   {
     this.degreeMinSec = 360 / 60;
   }

   public void setCircleRadius()
   {
     this.circleRadius = (this.circleCenterX - 50);
   }

   // x und y Positionen der Punkte werden gesetzt.
   public void setDimensionHours()
   {
     this.x = this.y = 0; // setze x und y auf 0;
     this.dimensionHours = new double[12][2];

     for (int i = 0; i < dimensionHours.length; i++)
     {

       this.x = this.circleRadius * Math.cos((Math.PI * (this.degreeHours * i - 90)) / 180);
       dimensionHours[i][0] = this.circleCenterX + this.x;

       this.y = circleRadius * Math.sin(Math.PI * (this.degreeHours * i - 90) / 180);
       dimensionHours[i][1] = this.circleCenterY + this.y;
     }
   }

   public void setDimensionMinutes()
   {
     this.x = this.y = 0; // setze x und y auf 0;
     this.dimensionHours = new double[60][2];

     for (int i = 0; i < dimensionMinutes.length; i++)
     {
       this.x = (this.circleRadius - 20) * Math.cos((Math.PI * (this.degreeMinSec * i - 90)) / 180);
       dimensionMinutes[i][0] = this.circleCenterX + this.x;

       this.y = (this.circleRadius - 20) * Math.sin((Math.PI * (this.degreeMinSec * i - 90)) / 180);
       dimensionMinutes[i][1] = this.circleCenterY + this.y;
     }
   }

   public void setDimensionSeconds()
   {
     this.x = this.y = 0; // setze x und y auf 0;
     this.dimensionSeconds = new double[60][2];

     for (int i = 0; i < dimensionSeconds.length; i++)
     {
       this.x = (this.circleRadius - 40) * Math.cos((Math.PI * (this.degreeMinSec * i - 90)) / 180);
       dimensionSeconds[i][0] = this.circleCenterX + this.x;

       this.y = (this.circleRadius - 40) * Math.sin((Math.PI * (this.degreeMinSec * i - 90)) / 180);
       dimensionSeconds[i][1] = this.circleCenterY + this.y;
     }
   }
  
   //Zufällig erstellte Farbenwerte werden gesetzt.
   public void setCircleColorHours()
   {
     this.circleColorHours = rdc.genRandomColor();
   }

   public void setCircleColorMinutes()
   {
     this.circleColorMinutes = rdc.genRandomColor();
   }

   public void setCircleColorSeconds()
   {
     this.circleColorSeconds = rdc.genRandomColor();
   }

   // h, m und s werden gesetzt.
   public void setTime()
   {
     int h, m;
     Calendar cal = Calendar.getInstance();

     h = Integer.parseInt(new SimpleDateFormat("hh").format(cal.getTime()));
     m = Integer.parseInt(new SimpleDateFormat("mm").format(cal.getTime()));

     this.hours = h;
     this.minutes = m;
   }
  
}
im Package
com.analogclock1.view ist
clockView.java
Java:
package org.analogclock1.view;
import javax.swing.*;
import java.awt.BorderLayout;
import java.awt.Graphics;

import org.analogclock1.model.clockModel;

public class clockView
{
   private JFrame frame;
    clockModel cm=new clockModel();

   public clockView(String text)
   {
     frame = new JFrame("View");
     frame.getContentPane().setLayout(new BorderLayout());
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     frame.setSize(cm.getFrameWidth(),cm.getFrameHeight());
     frame.setVisible(true);

   }

   public void setText(String text)
   {
     label.setText(text);
   }
   public JFrame  getFrameSize()
   {
    return frame;
   }
   public void paint(Graphics g)
   {
    
   }
  

}

.analogclock1.controller
clockController.java

jetzt zu meiner Ratlosigkeit
wie hole ich aus meinen 2DArrays die werte der Dimensionen und male daraus meine Kreise
prinzipiell geht es mir um das malen der Kreise. Die werte mittels for schleifen sind nicht das problem.
Aber wie male ich mit den werten.
wie würdet Ihr das angehen.

Wohlgemerkt das die kreise initial gezeichnet werden
dann werden Sie mit den Zeitwerten also Stunde Minute und Sekunde
mit neuen Farben nochmal gezeichnet ab dann jede Sekunde wieder.
ich hab echt ein Blackout.
Freue mich über jede Anregung.
 
Zuletzt bearbeitet von einem Moderator:

Java_RY

Mitglied
Hallo VfL_Freak, danke für die nachfrage ich versuches etwas genauer zu beschreiben.
Ich hab gerade ein Blackout wie ich nun vorgehen muss, damit ich meine Elemente gemalt bekomme.
Also zum einen müssen alle Kugeln initial dargestellt werden und dann nochmal gemalt werden mit neuen Farbwerten und nur die betroffenen. z.B es ist Gerade 17:11 dan sollten nun alle kugeln der Stunden bis einschließlich fünf neu gezeichnet werden.dann alle Minuten Kugeln bis einschließlich der 11. und dann die der aktuellen Sekunde und das in jeder eskunde geändert.
Die Logik mit der For-schleife die x und y werte der Kugeln auslesen kein ding.
Zu bestimmen welche Uhrzeit gerade ist kein ding wird ja schon alles gemacht.
Aber ich habe noch Probleme mit der paint Funktion.
wie sag ich dem das jetzt?
In der Weiterbildungseinrichtung wo ich zurzeit mein Java Lerne machen wir alles nur in einer Klasse das wollte ich aber nicht.
ich wollte bewusst das ganze trennen. daher die MVC Methode.
Ich hoffe das ich mein Problem erklären konnte.
 

mariane

Mitglied
Es geht wohl in erster Linie um das Verknuspeln von Modell, View und Controller, denn das ist noch nicht geschehen. Und um das wie, speziell bei der Paint-Methode, die ist ja derzeit komplett leer.

Ich würde erstmal die herkömmliche Variante umsetzen (also alles in einer Klasse), dort sich auf das Zeichnen konzentrieren. Dann mal ein paar Tutorials zu MVC auf Youtube reinziehen, diese nachvollziehen und ein wenig experimentieren und erst dann das Projekt umsetzen.
In dem Zusammenhang ist auch das Observer-Entwurfmuster (Beobachter) wichtig, ohne dem das MVC-Modell gar nicht auskommt, also auch das erstmal verstehen, üben etc.pp.
 

Java_RY

Mitglied
Ja Leute ich hab es nach etlichen Versuchen geschafft,
meine Uhr Läuft.
Ich werde das mal bei den Code Schnipseln ablegen und würde mich freuen wenn einige Profis mal drüber schauen und mir Ihre Kritik dazu geben ob das so richtig ist oder etwas noch zu verbessern gibt.
Im Leben Lernt man ja aus den Fehlern die einer gemacht hat, nur muss jemand ja sagen das es besser geht und wie es geht. :)

Vielen dank an alle die sich die Zeit genommen haben, mein Problem anzuschauen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J JTable verursacht NullPointerException.Ratlos. AWT, Swing, JavaFX & SWT 5
W Swing bzgl. Tableskalierung/Darstellung einer Matrix AWT, Swing, JavaFX & SWT 8
M Frage zu KeyListener bzgl. JApplet AWT, Swing, JavaFX & SWT 3
hdi Swing Bzgl JFrame & modaler Dialog AWT, Swing, JavaFX & SWT 6
U Hilfestellung zu MVC-Umsetzung bzgl JTrees AWT, Swing, JavaFX & SWT 9
M Frage bzgl. Formular-Design. AWT, Swing, JavaFX & SWT 2
N Schnelleres Malen AWT, Swing, JavaFX & SWT 22
E Auf JPanel malen und davor JComponenten anzeigen AWT, Swing, JavaFX & SWT 12
M Punkte malen AWT, Swing, JavaFX & SWT 1
M Schrift "malen" AWT, Swing, JavaFX & SWT 11
Regedit JavaFX Java Canvas hört ständig auf zu aktualisieren/malen AWT, Swing, JavaFX & SWT 3
Z Auf ein JLabel drauf malen? AWT, Swing, JavaFX & SWT 1
J Swing Bild laden, Kreise drin malen, Schreiben AWT, Swing, JavaFX & SWT 2
L Gradient Hintergrund malen und durchscheinen lassen AWT, Swing, JavaFX & SWT 8
windl Querstreifen beim Bilder malen und anpassen an neue CPU AWT, Swing, JavaFX & SWT 12
S JButton in JLabel malen AWT, Swing, JavaFX & SWT 7
E JButton Text malen AWT, Swing, JavaFX & SWT 3
J Swing Malen auf JPanel mit transparentem Hintergrund AWT, Swing, JavaFX & SWT 21
B 2D-Grafik Malen/übermalen mit Canvas AWT, Swing, JavaFX & SWT 5
K swing/awt Panel punkte malen AWT, Swing, JavaFX & SWT 4
G Auf Image malen AWT, Swing, JavaFX & SWT 12
B Wie Panel neu Laden/Malen/Aktualisieren AWT, Swing, JavaFX & SWT 14
G kreis malen -> welche funktion? AWT, Swing, JavaFX & SWT 3
V Framework zum Zeichnen/Malen? AWT, Swing, JavaFX & SWT 7
D bei Thread in JComponent malen NullPointerException AWT, Swing, JavaFX & SWT 3
J Einmal gleichzeitig auf zwei Graphics malen? AWT, Swing, JavaFX & SWT 5
C ".tif" Image in Java einbinden und malen lassen AWT, Swing, JavaFX & SWT 7
H auf einem Bild malen AWT, Swing, JavaFX & SWT 4
N malen => 1 Sekunde warten => malen AWT, Swing, JavaFX & SWT 2
V Punkte malen im Panel AWT, Swing, JavaFX & SWT 3
U Malen auf Buffered Image AWT, Swing, JavaFX & SWT 9
V Auf Knopfdruck malen ?????? AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben