Compare commits

..

3 Commits

Author SHA1 Message Date
3062eb8e20 Logger 2023-11-28 11:53:10 +01:00
7fb3107bb5 JavaDocs 2023-11-27 12:18:39 +01:00
9f880d55e2 Impl mit Translate 2023-11-27 12:14:17 +01:00
7 changed files with 153 additions and 37 deletions

1
.gitignore vendored
View File

@ -1,2 +1 @@
/build/ /build/
/dist/

View File

@ -0,0 +1,3 @@
Manifest-Version: 1.0
X-COMMENT: Main-Class will be added automatically by build

View File

@ -0,0 +1,2 @@
compile.on.save=true
user.properties.file=C:\\Users\\Js-Sc\\AppData\\Roaming\\NetBeans\\19\\build.properties

View File

@ -12,9 +12,7 @@ import javax.swing.WindowConstants;
/** /**
* *
* Programm, um mit Hilfe von Sinus und Cosinus drei sich drehende Zeiger zu * @author ahren
* implementieren.
* @author Je-To
*/ */
public class Start public class Start
{ {
@ -23,6 +21,7 @@ public class Start
JFrame frm = new JFrame(); JFrame frm = new JFrame();
frm.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); frm.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
Container c = frm.getContentPane(); Container c = frm.getContentPane();
c.setLayout(new OverlayLayout(c)); c.setLayout(new OverlayLayout(c));
for (int zeigerLaenge = 1; zeigerLaenge <=3; zeigerLaenge++) for (int zeigerLaenge = 1; zeigerLaenge <=3; zeigerLaenge++)
{ {

View File

@ -5,6 +5,7 @@
package aufgabe8_grafik2d; package aufgabe8_grafik2d;
import aufgabe8_grafik2d.util.OhmLogger;
import java.awt.BasicStroke; import java.awt.BasicStroke;
import java.awt.Color; import java.awt.Color;
import java.awt.Graphics; import java.awt.Graphics;
@ -18,14 +19,14 @@ import java.util.concurrent.Future;
import java.util.logging.Logger; import java.util.logging.Logger;
import javax.swing.JComponent; import javax.swing.JComponent;
/** /**
* Klasse für selbst gezeichnete Zeiger, die sich über einenn eigenen Thread *
* drehen können. * @author ahren
* @author Je-To
*/ */
public class Zeiger extends JComponent implements Runnable public class Zeiger extends JComponent implements Runnable
{ {
private Logger lg = Logger.getLogger("grafik"); private static Logger lg = OhmLogger.getLogger();
private static final float DICKE = 4f; private static final float DICKE = 4f;
private Line2D.Float linie; private Line2D.Float linie;
private BasicStroke stift; private BasicStroke stift;
@ -39,12 +40,12 @@ public class Zeiger extends JComponent implements Runnable
private int zeigerlaenge; private int zeigerlaenge;
private ExecutorService eService; private ExecutorService eService;
private Future task; private Future task;
/** /**
* Initialisierung des Zeigers * Initialisiert einen Zeiger.
* @param schlafzeit = Zeit, die der Thread wartet, bevor der Zeiger sich * @param schlafzeit: Ist die Zeit zwischen den Ticks
* wieder weiterbewegt * @param zeigerlaenge: Ist die länge des Zeigers
* @param zeigerlaenge = verhältnismäßige Zeigerlänge
*/ */
public Zeiger(long schlafzeit, int zeigerlaenge) public Zeiger(long schlafzeit, int zeigerlaenge)
{ {
@ -57,17 +58,15 @@ public class Zeiger extends JComponent implements Runnable
task = null; task = null;
} }
/**
* Thread für das Ändern des Winkels
*/
@Override @Override
public void run() public void run()
{ {
float delta = 1f;
while(true) while(true)
{ {
synchronized(this) synchronized(this)
{ {
alpha += 0.08; alpha += 0.1;
} }
this.repaint(); this.repaint();
try try
@ -83,44 +82,39 @@ public class Zeiger extends JComponent implements Runnable
public void start() public void start()
{ {
lg.info("Zeiger "+ this.zeigerlaenge+ " startet");
if (task == null) if (task == null)
{ {
task = eService.submit(this); task = eService.submit(this);
} }
} }
/**
* Zeichnen des Zeigers abhängig vom Winkel Alpha
* @param g
*/
@Override @Override
public void paintComponent(Graphics g) public void paintComponent(Graphics g)
{ {
super.paintComponent(g); super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g; Graphics2D g2 = (Graphics2D)g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
float breite = this.getWidth() - 1; float breite = this.getWidth() - 1;
float hoehe = this.getHeight() - 1; float hoehe = this.getHeight() - 1;
radius = (min(hoehe, breite)/2 * 0.9) * 1/ zeigerlaenge; radius = (min(hoehe, breite)/2 * 0.9) * 1/ zeigerlaenge;
xMitte = breite/2; g2.translate(breite/2, hoehe/2);
yMitte = hoehe/2; g2.rotate(alpha);
synchronized(this)
{ xAussen = radius;
xAussen = xMitte +cos(2*PI*alpha) * radius; yAussen = 0;
yAussen = yMitte + sin(2*PI*alpha) * radius;
} linie.setLine(0, 0, xAussen, yAussen);
linie.setLine(xMitte, yMitte, xAussen, yAussen);
g2.setStroke(stift); g2.setStroke(stift);
g2.setPaint(Color.RED); g2.setPaint(Color.RED);
g2.draw(linie); g2.draw(linie);
} }
} }

View File

@ -0,0 +1,111 @@
package aufgabe8_grafik2d.util;
/*
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
*/
import java.io.IOException;
import java.io.InputStream;
import java.time.LocalDateTime;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
//import java.util.Properties;
import java.util.logging.*;
/**
* Klasse zur eigens konfigurierten Log-Ausgabe in der Console
* @author ahrens
*/
public class OhmLogger
{
private static final String LOGGER_NAME = "OhmLogger";
private static Logger lg = null;
/**
* privater Konstrukter -> Singleton
*/
private OhmLogger()
{
}
/**
* Public Method zum Erstellen des Loggers und zum Aufruf der Methode
* zum Initialisieren
* @return Referenz auf Logger
*/
public static Logger getLogger()
{
if (lg == null)
{
lg = Logger.getLogger(LOGGER_NAME);
initLogger();
}
return lg;
}
/**
* Methode zum Initialisieren, Suchen der Konfigurationsdatei, Anlegen eines
* neuen Console Handlers, Löschen der bisherigen Standard Handler und
* Einfügen des eigenen Handler, Setzen des Levels, je nach Properties
*/
private static void initLogger()
{
try (InputStream configFile = OhmLogger.class.getClassLoader().getResourceAsStream("config.properties")) {
if (configFile != null) {
Properties properties = new Properties();
properties.load(configFile);
java.util.logging.Level classLogLevel = java.util.logging.Level.parse(properties.getProperty("log.level"));
ConsoleHandler ch = new ConsoleHandler();
ch.setFormatter(new OhmFormatter());
lg.setUseParentHandlers(false);
lg.getHandlers();
lg.addHandler(ch);
lg.setLevel(classLogLevel);
String logDirectory = properties.getProperty("log.directory");
String logFileName = properties.getProperty("log.filename");
FileHandler fileHandler = new FileHandler(logDirectory + "/" + logFileName, true);
fileHandler.setFormatter(new OhmFormatter());
lg.addHandler(fileHandler);
} else {
System.err.println("Unable to find config.properties file. OhmLogger will use default settings.");
}
} catch (IOException | SecurityException e) {
System.err.println("Error configuring OhmLogger: " + e.getMessage());
}
}
}
/**
* Klasse zum Setzen des Formates des Auszugebenden Log-Strings
* @author ahren
*/
class OhmFormatter extends Formatter
{
@Override
public String format(LogRecord record)
{
String logline = "| ";
LocalDateTime ldt = LocalDateTime.now();
logline += ldt.toString();
logline += " | " + record.getLevel();
logline += " | " + record.getSourceClassName();
logline += " | " + record.getMessage();
logline += " |\n";
return logline;
}
}

8
src/config.properties Normal file
View File

@ -0,0 +1,8 @@
log.level=INFO
log.directory=../Aufgabe7_bandit
log.filename=ohmLog
# Beispiel f\u00fcr verschiedene Level f\u00fcr unterschiedliche Pakete
# log.level.bandit.Zahlengenerator=FINE
# log.level.bandit.Model.Wuerfel=WARNING