Main.java

package de.hs_mannheim.informatik.mvn;

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.file.Paths;
import java.time.LocalTime;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.EmptyStackException;
import java.util.Scanner;
import java.util.Stack;
import java.util.Timer;
import java.util.TimerTask;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class Main extends JFrame implements ActionListener {

    private static String[] filepath = {"", ""};
    private static CardLayout cl = new CardLayout();
    private static JPanel main = new JPanel(cl);
    private static Timer timer = new Timer(); 
    private static long startTime;
    private static long elapsedSeconds;

    public static void main(String[] args) throws FileNotFoundException {
        new Main();
    }

        public Main(){
            JPanel menuPanel = new JPanel(new BorderLayout());
            JPanel buttonPanel = new JPanel(new GridLayout(7,1,10,10));
            String[] buttons = {
                "4x4 - leicht",
                "5x5 - leicht",
                "8x8 - leicht",
                "8x8 - medium",
                "10x10 - medium",
                "15x15 - medium"
            };
            for(int i=0;i<buttons.length;i++){
                JButton b0 = new JButton(buttons[i]);
                buttonPanel.add(b0);
                int[] count = {i};
                String[] num = buttons[i].split("x"); 
                b0.addActionListener(e -> {
                    int j = count[0];
                    String currentDirectory = Paths.get("").toAbsolutePath().toString();
                    System.out.println("Current Working Directory: " + currentDirectory);
                    String[] paths = {
                        "C:/Users/Berat/Desktop/hitoriNew/src/main/java/de/hs_mannheim/informatik/mvn/Hitori_Spielfelder/Hitori4x4_leicht.csv",           
                        "C:/Users/Berat/Desktop/hitoriNew/src/main/java/de/hs_mannheim/informatik/mvn/Hitori_Spielfelder/Hitori5x5leicht.csv",
                        "C:/Users/Berat/Desktop/hitoriNew/src/main/java/de/hs_mannheim/informatik/mvn/Hitori_Spielfelder/Hitori8x8leicht.csv",
                        "C:/Users/Berat/Desktop/hitoriNew/src/main/java/de/hs_mannheim/informatik/mvn/Hitori_Spielfelder/Hitori8x8medium.csv",
                        "C:/Users/Berat/Desktop/hitoriNew/src/main/java/de/hs_mannheim/informatik/mvn/Hitori_Spielfelder/Hitori10x10medium.csv",
                        "C:/Users/Berat/Desktop/hitoriNew/src/main/java/de/hs_mannheim/informatik/mvn/Hitori_Spielfelder/Hitori15x15_medium.csv"
                    };

                    System.out.println("Current Working Directory: " + Paths.get("").toAbsolutePath());

                    for (String path : paths) {
                        File file = new File(path);
                        if (file.exists()) {
                            System.out.println("File found: " + file.getAbsolutePath());
                        } else {
                            System.out.println("File not found: " + file.getAbsolutePath());
                        }
                    }


                    filepath[0] = paths[j];
                    filepath[1] = num[0];
                    try{
                    ablauf(filepath);
                    } catch (FileNotFoundException s){
                        System.out.println("Fehler: " + s.getMessage());
                    }
                });
            }
            JButton b = new JButton("Highscores");
            b.addActionListener(e -> {
                highscoreScreen();
            });
        buttonPanel.add(b);
        menuPanel.add(buttonPanel, BorderLayout.CENTER);
        JLabel text0 = new JLabel("Wählen Sie ein Level aus!");
        menuPanel.add(text0, BorderLayout.NORTH);
        //add(menuPanel);
		setVisible(true);
		setSize(600, 600);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        add(main);
        main.add(menuPanel, "HAUPT");
		cl.show(main, "HAUPT");
        }
        
    public static void ablauf(String[] filepath) throws FileNotFoundException{     
        Stack<String> madeMoves = new Stack<>();
        String[][] data = getData(filepath[0], Integer.parseInt(filepath[1]));
        String[][] colors = makeColorArray(data.length);
        JButton[][] buttons = makeButtonArray(data);
        paintGame(filepath, buttons, colors, madeMoves, data);
    }

    private static void highscoreScreen(){
        JPanel highscorePanel = new JPanel(new BorderLayout());
        JPanel buttonPanel = new JPanel(new GridLayout(7,1,10,10));
        String[] buttons = {
            "Highscore 4x4 - leicht",
            "Highscore 5x5 - leicht",
            "Highscore 8x8 - leicht",
            "Highscore 8x8 - medium",
            "Highscore 10x10 - medium",
            "Highscore 15x15 - medium"
        };
        for(int i=0; i<buttons.length;i++){
            JButton b0 = new JButton(buttons[i]);
            buttonPanel.add(b0);
            int[] count = {i};
            b0.addActionListener(e -> {
                int j = count[0];
                String[] paths = {
                    "C:/Users/Berat/Desktop/hitoriNew/src/main/java/de/hs_mannheim/informatik/mvn/Hitori_Highscores/Hitori4x4_leicht.txt",
                    "C:/Users/Berat/Desktop/hitoriNew/src/main/java/de/hs_mannheim/informatik/mvn/Hitori_Highscores/Hitori5x5leicht.txt",
                    "C:/Users/Berat/Desktop/hitoriNew/src/main/java/de/hs_mannheim/informatik/mvn/Hitori_Highscores/Hitori8x8leicht.txt",
                    "C:/Users/Berat/Desktop/hitoriNew/src/main/java/de/hs_mannheim/informatik/mvn/Hitori_Highscores/Hitori8x8medium.txt",
                    "C:/Users/Berat/Desktop/hitoriNew/src/main/java/de/hs_mannheim/informatik/mvn/Hitori_Highscores/Hitori10x10medium.txt",
                    "C:/Users/Berat/Desktop/hitoriNew/src/main/java/de/hs_mannheim/informatik/mvn/Hitori_Highscores/Hitori15x15_medium.txt"
                };
                try {
                    showHighscores(paths[j]);
                } catch (FileNotFoundException e1) {
                    e1.printStackTrace();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            });
        }
        JButton b = new JButton("Zurück");
        b.addActionListener(e -> {
            cl.show(main, "HAUPT"); 
        });
        buttonPanel.add(b);
        highscorePanel.setVisible(true);
        highscorePanel.setSize(600,600);
        highscorePanel.add(buttonPanel, BorderLayout.CENTER);
        JLabel text0 = new JLabel("Level für Highscore Liste auswählen!");
        highscorePanel.add(text0, BorderLayout.NORTH);
        main.add(highscorePanel, "HIGHSCORES");
        cl.show(main, "HIGHSCORES");
    }

    private static void sortByTime(String path) throws FileNotFoundException, IOException{
        File file = new File(path);
        ArrayList<Entry> entries = new ArrayList<>();

        try (BufferedReader br = new BufferedReader(new FileReader(file))) {
            String line;
            while ((line = br.readLine()) != null) {
                String[] parts = line.split(" ", 2); 
                String timeStr = parts[0];
                String name = parts.length > 1 ? parts[1] : "";
                    
                String[] timeParts = timeStr.split(":");
                int hour = Integer.parseInt(timeParts[0]);
                int minute = Integer.parseInt(timeParts[1]);
                LocalTime time = LocalTime.of(hour, minute);
                    
                entries.add(new Entry(time, name));
            }
        }
        
        entries.sort(Comparator.comparing(e -> e.time));
        
        try (BufferedWriter bw = new BufferedWriter(new FileWriter(file))) {
            for (Entry e : entries) {
                String formattedTime = String.format("%02d:%02d", e.time.getHour(), e.time.getMinute());
                bw.write(formattedTime + " " + e.name);
                bw.newLine();
            }
        }
    }
    
    private static void showHighscores(String path) throws FileNotFoundException, IOException{
        sortByTime(path);
        JPanel mainPanel = new JPanel(new BorderLayout());
            File file = new File(path);
            int i = 0;
            try (Scanner scanner = new Scanner(file)) {
                while (scanner.hasNextLine()) {
                    scanner.nextLine();
                    i++;
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        JPanel highscorePanel = new JPanel(new GridLayout(i,1,10,10));
        if(i>0){
            ArrayList<String> lines = readFromFile(path);
            for(String s: lines){
                JLabel text = new JLabel(s);
                highscorePanel.add(text);
            }
            JButton b = new JButton("Zurück");
            b.addActionListener(e -> {
                cl.show(main, "HIGHSCORES");
                highscoreScreen();
            });
            mainPanel.add(b, BorderLayout.SOUTH);
        } else {
            JLabel text = new JLabel("Noch kein Highscore eingetragen.");
            highscorePanel.add(text);
            JButton b = new JButton("Zurück");
            b.addActionListener(e -> {
                cl.show(main, "HIGHSCORES");
                highscoreScreen();
            });
            mainPanel.add(b, BorderLayout.SOUTH);
        }
        mainPanel.add(highscorePanel, BorderLayout.CENTER);
        mainPanel.setVisible(true);
        mainPanel.setSize(600,600);
        main.add(mainPanel, "HIGHSCORES");
        cl.show(main, "HIGHSCORES");
    }

    private static ArrayList<String> readFromFile(String path){
        ArrayList<String> lines = new ArrayList<>();
        try (BufferedReader reader = new BufferedReader(new FileReader(path))) {
            String line;
            while ((line = reader.readLine()) != null) {
                lines.add(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return lines;
    }

    private static String[][] getData(String filepath, int rows) throws FileNotFoundException{
        String filepath0 = filepath;
        Scanner sc = new Scanner(new File(filepath0));
        String[][] data = new String[rows][rows];
        int rowInt = 0;
        while (sc.hasNextLine() && rowInt < rows) {
            String line = sc.nextLine();
            data[rowInt] = line.split(",");
            rowInt++;
        }
        sc.close();
        return data;
    }

    public static String[][] makeColorArray(int size){
        String[][] colors = new String[size][size];
        for(int i=0;i<size;i++){
            for(int j=0;j<size;j++){
                colors[i][j] = "W";
            }
        }
        return colors;
    }

    private static JButton[][] makeButtonArray(String[][] data){
        JButton[][] buttons = new JButton[data.length][data.length];
        for(int i=0;i<data.length;i++){
            for(int j=0;j<data.length;j++){
                String number = data[i][j];
                JButton b0 = new JButton(number);
                buttons[i][j] = b0;
            }
        }
        return buttons;
    }

    public static void paintGame(String[] filepath, JButton[][] buttons, String[][] colors, Stack<String> madeMoves, String[][] data) throws FileNotFoundException{
        elapsedSeconds = 0;
        System.out.println("BB: " + filepath[0]);
        System.out.println("BB: " + filepath[1]);
        int num = buttons.length;
        JPanel gameGrid = new JPanel(new GridLayout(num,num,0,0));
        for(int i=0;i<num;i++){
            for(int j=0;j<num;j++){
                JButton b = buttons[i][j];
                b.setOpaque(true);
                b.setContentAreaFilled(true);
                b.setBorderPainted(false);
                b.setFocusPainted(false);
                b.setBackground(Color.WHITE);
                gameGrid.add(b);
                String[] pos = getCords(i,j); 
                b.addActionListener(e -> {paintButton(b, pos, colors , madeMoves);});
            }
        }
        JPanel mainPanel = new JPanel(new BorderLayout());
        mainPanel.add(gameGrid, BorderLayout.CENTER);
        JPanel buttonGrid = new JPanel(new GridLayout(1,4,10,10));
        JButton b0 = new JButton("Aufgeben");
        b0.addActionListener(e -> {
            filepath[0] = "";
            filepath[1] = "";      
            cl.show(main, "HAUPT");
            });
        JButton b1 = new JButton("Zurück");
        b1.addActionListener(e -> {backOneStep(madeMoves, buttons, colors, gameGrid);});
        JButton b2 = new JButton("Zurücksetzen");
        b2.addActionListener(e -> {try {
            totalResetButton(buttons, colors, madeMoves, data);
        } catch (FileNotFoundException e1) {
            e1.printStackTrace();
        }});
        JButton b3 = new JButton("Abgeben");
        String path = filepath[0];

        boolean[] levelFinished = {false};
        JPanel topGrid = new JPanel(new GridLayout(1,2,10,10));
        mainPanel.add(topGrid, BorderLayout.NORTH);
        JLabel timeLabel = new JLabel("Zeit: 00:00");
        topGrid.add(timeLabel);
        topGrid.revalidate();
        topGrid.repaint();
        boolean isOkay = abgabeMöglich(path, data, colors);
        levelFinished[0] = isOkay; 
        Timer timer = new Timer();
        startTimer();
        timer.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                elapsedSeconds = (System.currentTimeMillis() - startTime) / 1000;
                long minutes = (elapsedSeconds % 3600) / 60;
                long seconds = elapsedSeconds % 60;
                String newTime = String.format("Zeit: %02d:%02d", minutes, seconds);

                SwingUtilities.invokeLater(() -> {
                    timeLabel.setText(newTime);
                    timeLabel.revalidate();
                    timeLabel.repaint();
                });
            }
        }, 0, 1000);

        JLabel luecke = new JLabel("");
        topGrid.add(luecke);

        b3.addActionListener(e -> {
            try {
                levelFinished[0] = abgabeMöglich(path, data, colors);
                System.out.println("0000: " + levelFinished[0]);
            } catch (FileNotFoundException e1) {
                e1.printStackTrace();
            }
            if (levelFinished[0] == true) {
                System.out.println("1111: " + levelFinished[0]);
                String endtime = stopTimer();
                timer.cancel();
                try {
                    finish(endtime, filepath, path, data, colors);
                } catch (FileNotFoundException e1) {
                    e1.printStackTrace();
                }
            } else {
                System.out.println("2222: " + levelFinished[0]);
                luecke.setText("Abgabe nicht richtig!");
                mainPanel.revalidate();
                mainPanel.repaint();
            }
        });

        buttonGrid.add(b0);buttonGrid.add(b1);buttonGrid.add(b2);buttonGrid.add(b3);
        mainPanel.add(buttonGrid, BorderLayout.SOUTH);
        mainPanel.setVisible(true);
        main.add(mainPanel, "GAME");
        cl.show(main, "GAME");
        }

        private static String startTimer() {
            startTime = System.currentTimeMillis();
            elapsedSeconds = 0; 
            return "Zeit: 00:00";
        }
        
        private static String stopTimer() {
            timer.cancel();
            long minutes = (elapsedSeconds % 3600) / 60;
            long seconds = elapsedSeconds % 60;
            String endtime = String.format("Zeit: %02d:%02d", minutes, seconds);
            elapsedSeconds = 0; // Reset so the next start begins at zero
            return endtime;
        }

    private static boolean abgabeMöglich(String path, String[][] data, String[][] colors) throws FileNotFoundException{
        boolean abgabeMöglich = false;
        String[][] result = getResult(data, colors);
        System.out.println("RESULT");
        printWholeCSV(path);
        ArrayList<String> filteredData = getSolution(path, result);
        String[][] ergebnis1 = getErgebnisArray(result, filteredData);
        System.out.println("ERGEBNIS");
        int count = 0;
        for(int i=0;i<result.length;i++){
            for(int j=0;j<result.length;j++){
                if(result[i][j].equals(ergebnis1[i][j])){
                } else {
                    count--;
                }
            }
        }
        if(count <0){
            abgabeMöglich = false;
        } else {
            abgabeMöglich = true;
        }
        return abgabeMöglich;
    }
    
    public static void printWholeCSV(String path) {
        System.out.println("NOW PRINTING ALL");
        try (BufferedReader br = new BufferedReader(new FileReader(path))) {
            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            System.out.println("An error occurred while reading the file: " + e.getMessage());
        }
        System.out.println("DONE PRINTING ALL");
    }

    private static void paintButton(JButton b, String[] pos, String[][] colors, Stack<String> madeMoves){
        int i = Integer.parseInt(pos[0]);
        int j = Integer.parseInt(pos[1]);
        String col = colors[Integer.parseInt(pos[0])][Integer.parseInt(pos[1])];
        if(col.endsWith("W")){
            b.setOpaque(true);
            b.setForeground(Color.BLACK);
            b.setContentAreaFilled(true);
            b.setBorderPainted(false);
            b.setFocusPainted(false);
            b.setBackground(Color.lightGray);
            colors[i][j] += "G";
            String logEntrance = i+"."+j+"."+"G";
            madeMoves.push(logEntrance);
        }
        if(col.endsWith("G")){
            b.setOpaque(true);
            b.setForeground(Color.WHITE);
            b.setContentAreaFilled(true);
            b.setBorderPainted(false);
            b.setFocusPainted(false);
            b.setBackground(Color.BLACK);
            colors[i][j] += "B";
            String logEntrance = i+"."+j+"."+"B";
            madeMoves.push(logEntrance);
        }
        if(col.endsWith("B")){
            b.setOpaque(true);
            b.setForeground(Color.BLACK);
            b.setContentAreaFilled(true);
            b.setBorderPainted(false);
            b.setFocusPainted(false);
            b.setBackground(Color.WHITE);
            colors[i][j] += "W";
            String logEntrance = i+"."+j+"."+"W";
            madeMoves.push(logEntrance);
        }
    }

    private static String[] getCords(int i, int j){
        String yKoordinate = String.valueOf(i);
        String xKoordinate = String.valueOf(j);
        String[] pos = {yKoordinate, xKoordinate};
        return pos;
    }
    
    public static void backOneStep(Stack<String> movesMade, JButton[][] buttons, String[][] colors, JPanel grid){
        try {
            String move = movesMade.pop();
            String[] line = move.split("\\.");
            String y = line[0];
            String x = line[1];
            String color = line[2];
            if(color.equals("W")){
                int i = Integer.parseInt(y);
                int j = Integer.parseInt(x);
                JButton b0 = buttons[i][j];
                b0.setOpaque(true);
                b0.setForeground(Color.WHITE);
                b0.setContentAreaFilled(true);
                b0.setBorderPainted(false);
                b0.setFocusPainted(false);
                b0.setBackground(Color.BLACK);
                buttons[i][j] = b0;
                String str = colors[i][j]; 
                String str0 = str.substring(0, str.length() - 1);
                colors[i][j] = str0;
                grid.repaint();
                gridUpdate(grid, buttons);
            }else if(color.equals("G")){
                int i = Integer.parseInt(y);
                int j = Integer.parseInt(x);
                JButton b0 = buttons[i][j];
                b0.setOpaque(true);
                b0.setForeground(Color.BLACK);
                b0.setContentAreaFilled(true);
                b0.setBorderPainted(false);
                b0.setFocusPainted(false);
                b0.setBackground(Color.WHITE);
                buttons[i][j] = b0;
                String str = colors[i][j]; 
                String str0 = str.substring(0, str.length() - 1);
                colors[i][j] = str0;
                gridUpdate(grid, buttons);
            } else if(color.equals("B")){
                int i = Integer.parseInt(y);
                int j = Integer.parseInt(x);
                JButton b0 = buttons[i][j];
                b0.setOpaque(true);
                b0.setForeground(Color.BLACK);
                b0.setContentAreaFilled(true);
                b0.setBorderPainted(false);
                b0.setFocusPainted(false);
                b0.setBackground(Color.lightGray);
                buttons[i][j] = b0;
                String str = colors[i][j]; 
                String str0 = str.substring(0, str.length() - 1);
                colors[i][j] = str0;
                gridUpdate(grid, buttons);
            } 
        } catch(EmptyStackException e) {}  
    }

    private static void gridUpdate(JPanel grid, JButton[][] buttons){
        grid.removeAll();
        grid.repaint();
        for(int i = 0; i<buttons.length; i++){
            for(int j = 0; j<buttons.length;j++){
                JButton b0 = buttons[i][j];
                grid.add(b0);
                grid.repaint();
            }
        }
    }

    private static void totalResetButton(JButton[][] buttons, String[][] colors,Stack<String> madeMoves,String[][] data) throws FileNotFoundException{
        madeMoves.clear();
            for(int i = 0; i<data.length;i++){
                for(int j = 0; j<data.length;j++){
                    colors[i][j] = "W";
                    buttons[i][j] = null;
            }
        JButton[][] buttons0 = makeButtonArray(data);
        paintGame(filepath, buttons0, colors, madeMoves, data); 
        }
    }

    private static String[][] getResult(String[][] data, String[][] colors){
        String[][] result = new String[data.length][data.length];
        for(int i=0;i<data.length;i++){
            for(int j=0;j<data.length;j++){
                String farben = colors[i][j];
                String lastColor = String.valueOf(farben.charAt(farben.length() - 1));
                if(lastColor.equals("G")){
                    lastColor = "W";
                }
                result[i][j] = lastColor;
            }
        }
        System.out.println("AAAAAAAA");
        return result;
    }

    private static ArrayList<String> getSolution(String path, String[][] result) throws FileNotFoundException {
        Scanner sc = new Scanner(new File(path)); 
        ArrayList<String> filteredData = new ArrayList<>();
        boolean isUnderComment = false;
        while (sc.hasNextLine()) {
            String line = sc.nextLine().trim();
            if (line.equals("//Lösung (schwarze Felder)")) {
                isUnderComment = true; 
                continue;
            }
            if (isUnderComment && !line.isEmpty()) {
                String[] lineArray = line.split(",");
                int num1 = Integer.parseInt(lineArray[0]);
                int num2 = Integer.parseInt(lineArray[1]);
                String newNum1 = String.valueOf(num1-1);
                String newNum2 = String.valueOf(num2-1);
                String newLine = newNum1+","+newNum2;
                filteredData.add(newLine);
            }
        }
        sc.close();
        System.out.println("BBBBBB");
        System.out.println(filteredData);
        return filteredData;
    }

    private static String[][] getErgebnisArray(String[][] result, ArrayList<String> filteredData){
        String[][] ergebnis = new String[result.length][result.length];
        for(int i=0;i<result.length;i++){
            for(int j=0;j<result.length;j++){
                ergebnis[i][j] = "W";
            }
        }
        for (String index : filteredData) { 
            String[] parts = index.split(",");
            int row = Integer.parseInt(parts[0].trim());
            int col = Integer.parseInt(parts[1].trim());
            if (row >= 0 && row < ergebnis.length && col >= 0 && col < ergebnis[row].length) {
                ergebnis[row][col] = "B"; 
            }
        }
        System.out.println("ERGEBNISMETHODE");
        return ergebnis;
    }

    public static void finish(String endtime, String[] filepath, String path, String[][] data, String[][] colors) throws FileNotFoundException{
        JPanel mainPanel = new JPanel(new BorderLayout());
        JLabel text = new JLabel("Geben Sie unten Ihren Namen an um sich in der Highscore Liste einzutragen.");
        mainPanel.add(text, BorderLayout.NORTH);
        JTextField field = new JTextField(20);
        mainPanel.add(field, BorderLayout.CENTER);
        JButton b = new JButton("In der Highscore Liste eintragen");
        mainPanel.add(b, BorderLayout.SOUTH);
        mainPanel.setVisible(true);
        mainPanel.setSize(600,600);
        b.addActionListener(e -> {
            String username = field.getText();
            try {
                LogTest.newRecord(path, username, endtime);
                filepath[0] = "";
                filepath[1] = "";
                cl.show(main, "HAUPT");
            } catch (FileNotFoundException e1) {
                e1.printStackTrace();
            }    
        });
        main.add(mainPanel, "HIGHSCORENEU");
        cl.show(main, "HIGHSCORENEU");
    }

    // private static void newRecord(String path, String username, String time) throws FileNotFoundException{
    //     String timePart = time.substring("Zeit: ".length()).trim();
    //     String[] parts = path.split("/");
    //     String filename = parts[parts.length - 1]; 
    //     int dotIndex = filename.lastIndexOf("."); 
    //     String result = filename.substring(0, dotIndex); 
    //     String ordner = "Hitori_Highscores/";
    //     String filetype = ".txt";
    //     String filepath = ordner+result+filetype;
    //     Scanner sc = new Scanner(filepath);
    //         while (sc.hasNextLine()) {
    //             sc.nextLine();
    //         }
    //         sc.close();
    //     try (BufferedWriter writer = new BufferedWriter(new FileWriter(filepath, true))) {
    //         String eintrag = timePart + " " + username;
    //         System.out.println(eintrag);
    //         writer.write(timePart + " " + username);
    //         writer.newLine();
    //     } catch (IOException e) {
    //         e.printStackTrace();
    //     }
    // }
    
    @Override 
    public void actionPerformed(ActionEvent e){
    }
}

class Entry {
    LocalTime time;
    String name;

    Entry(LocalTime time, String name) {
        this.time = time;
        this.name = name;
    }
}


class LogDemo{
    private static final Logger log = Logger.getLogger(LogDemo.class.getName());

    public static void main(String[] args){
        log.info("LOS GEHTS!");

        try {
            ((Object) null).toString();
        } catch (Exception e) {
            log.log(Level.SEVERE, "oh oh", e);
        }

        log.info("GING GUT.");
    }
}