Compare commits

...

16 Commits

Author SHA1 Message Date
8d950c5704 Random to test Gitea PFP 2024-06-14 22:22:52 +02:00
Matti
cad9726d0d Size makes the Layout hurt my Eyes less 2024-06-07 14:33:44 +02:00
Matti
4c54ba5d4b Add tiny "i" Icon 2024-06-07 14:30:16 +02:00
Matti
1d523ed097 Add Correct Content 2024-06-07 14:25:11 +02:00
Matti
a64040170a Update Readme 2024-06-07 10:02:58 +02:00
Matti
59998680ad Add LabeledRadioButtons 2024-06-06 22:19:00 +02:00
Matti
8429d5d7ae Add Maker methods 2024-06-06 22:06:33 +02:00
Matti
dd5284972c Add Images / RadioButtons 2024-06-06 21:28:01 +02:00
Matti
ba814ad400 Add "AddLabeledTextBox" 2024-06-06 19:52:55 +02:00
Matti
238759ad89 Start with good (?) Version.
Just adding MenuBar does not show?
2024-06-06 19:42:33 +02:00
Matti
8c5e3a705a Start builing Gui, demo creates 2 because the first one doesnt load 2024-06-05 16:21:59 +02:00
Matti
a86661a37a Add Slides 15 2024-06-04 13:03:30 +02:00
Matti
929832b3aa Random Stuff that needs comitting 2024-06-03 15:18:05 +02:00
Matti
b5d79e2b57 Parallel works as long as numUsers >= numPrinters 2024-06-03 15:16:33 +02:00
Matti
eadcc6fe1c Parallel adding kinda works 2024-05-31 14:29:43 +02:00
Matti
b67396d350 Add 4 1 2024-05-30 19:38:33 +02:00
22 changed files with 518 additions and 11 deletions

2
.idea/misc.xml generated
View File

@@ -1,5 +1,5 @@
<project version="4">
<component name="ProjectRootManager" version="2" project-jdk-name="21" project-jdk-type="JavaSDK">
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" project-jdk-name="openjdk-22" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 210 KiB

BIN
Medien/Bilder/info_I.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 750 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 469 B

View File

@@ -0,0 +1,5 @@
Moodle meldet beim Versuch die Word-Datei einzufügen einen Fehler "Verbindung zum Server verloren"
daher die Abgabe im PDF Format.
Die Word Datei ist bei Gitea hochgeladen und kann dort heruntergeladen werden.
https://gitea.hb.dhbw-stuttgart.de/vanBos/S2_Aufgaben/src/branch/main/Medien/Dokumente/Abgabe%2014.05.24.docx

Binary file not shown.

View File

@@ -16,7 +16,8 @@
- c) Java built-in generic Stack
- VL 3 Aufgabe 2 (Dynamischer Speicher einer Queue)
- VL 3 Aufgabe 3 (ArrayList vs LinkedList)
- VL 4 Aufgabe 1 (Threads counting)
- VL 4 Aufgabe 2 (User - Printer)
- keine

View File

@@ -2,15 +2,11 @@
// then press Enter. You can now see whitespace characters in your code.
import part3.aufg3.Anwendung;
public class Main {
public static void main(String[] args) {
int size;
int MAX_LENGTH = 3;
int MIN_LENGTH = 10;
for (int i = 0; i <25; i++) {
size = (int) (Math.random() * MAX_LENGTH);
System.out.println(size);
}
System.out.println("I am Main!");
}
}

View File

@@ -38,6 +38,10 @@ public class Schlenglein <T>{
return this.maxSize;
}
public boolean isEmpty(){
return this.size()<=0;
}
public void attemptDynamicResize(){
if (numberOfElements < 0.2*maxSize){
// Kleiner Machen
@@ -62,4 +66,13 @@ public class Schlenglein <T>{
System.arraycopy(temp, 0, myArray, 0, maxSize / 2);
}
}
public void printAll(){
System.out.print("[");
for (int i = 0; i < this.size()-1; i++) {
System.out.print(this.myArray[i] + ", ");
}
System.out.println(this.myArray[this.size()-1] + "]");
}
}

View File

@@ -57,7 +57,7 @@ public class Anwendung {
public static void main(String[] args) {
int stringsToAdd = 500_000;
int stringsToAdd = 1000_000;
long totalTimeSpent = 0;
int measurements = 10;

View File

12
src/part4/aufg1/Demo.java Normal file
View File

@@ -0,0 +1,12 @@
package part4.aufg1;
public class Demo {
public static void main(String[] args) {
ThreadedCounter tc = new ThreadedCounter(-1,1);
ThreadedCounter tC = new ThreadedCounter(4,2);
tc.start();
tC.start();
}
}

View File

@@ -0,0 +1,30 @@
package part4.aufg1;
public class ThreadedCounter extends Thread {
private final int threadNumber;
private final int increment;
static int sharedInt = 0;
static int iterations = 0;
public ThreadedCounter(int increment, int threadNumber) {
this.increment = increment;
this.threadNumber = threadNumber;
}
public void run() {
while (sharedInt < 1000){
synchronized (getClass()) {
iterations++;
sharedInt += increment;
System.out.println("Thread " + threadNumber + " made the shared Int: " + sharedInt);
try {
sleep(10);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
System.out.println("it took " + iterations + " iterations");
}
}

28
src/part4/aufg2/Demo.java Normal file
View File

@@ -0,0 +1,28 @@
package part4.aufg2;
/*
In einem System arbeiten eine Reihe von Benutzer, die von Zeit zu Zeit
Druckaufträge eines gewissen Umfangs erzeugen.
Diese werden in einer Druckerwarteschlange verwaltet.
Zwei Drucker stehen zur Verfügung und arbeiten die Aufträge ab.
Modellieren Sie das Problem als ErzeugerVerbraucherProblem und realisieren Sie es in Java.
*/
public class Demo {
public static void main(String[] args) {
int numUsers = 7;
int numPrinter = 4;
for (int i = 1; i <= numUsers; i++) {
User user = new User(i);
user.start();
}
for (int i = 1; i <= numPrinter ; i++) {
Printer printer = new Printer(i);
printer.start();
}
}
}

View File

@@ -0,0 +1,31 @@
package part4.aufg2;
public class Printer extends Thread {
private int threadNumber;
public Printer(int threadNumber){
this.threadNumber = threadNumber;
}
public void run() {
while (true) {
try {
synchronized (Puwwer.q) {
if (Puwwer.q.isEmpty()){
try {
Puwwer.q.wait();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
System.out.println("Printer " + this.threadNumber + " prints " + Puwwer.q.get());
}
} catch (NullPointerException e){}
try {
sleep(100);
} catch (InterruptedException ex) {
throw new RuntimeException(ex);
}
}
}
}

View File

@@ -0,0 +1,7 @@
package part4.aufg2;
import part3.aufg2.Schlenglein;
public class Puwwer {
static Schlenglein q = new Schlenglein();
}

36
src/part4/aufg2/User.java Normal file
View File

@@ -0,0 +1,36 @@
package part4.aufg2;
public class User extends Thread {
private int threadNumber;
public User(int threadNumber) {
this.threadNumber = threadNumber;
}
public synchronized void makeRequest() {
synchronized (Puwwer.q) {
int randomInt = (int) (Math.random() * ((int) (Math.random() * 1000)));
String randomIntStr = this.threadNumber + " " + randomInt;
Puwwer.q.add(randomIntStr);
System.out.println("User " + threadNumber + " added " + randomIntStr);
try {
Puwwer.q.notify();
} catch (IllegalMonitorStateException e) {
throw new RuntimeException(e);
}
}
}
public void run() {
while (true) {
makeRequest();
try {
sleep(3000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
}

14
src/part5/Demo.java Normal file
View File

@@ -0,0 +1,14 @@
package part5;
public class Demo {
public static void main(String[] args) {
// for (int i = 0; i < 2; i++) {
// Window w = new Window("My Java GUI");
// w.display();
// }
aufg gudWindow = new aufg("Mein Geniales GUI", 400, 340);
gudWindow.loadDesign2();
gudWindow.display(true);
}
}

88
src/part5/Window.java Normal file
View File

@@ -0,0 +1,88 @@
package part5;
import javax.swing.*;
import javax.swing.text.html.HTMLEditorKit;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
public class Window {
private String title;
public Window(String title){
this.title = title;
}
public JFrame setup(int height, int width){
JFrame w = new JFrame();
w.setVisible(true);
w.setSize(width,height);
w.setTitle(this.title);
w.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
return w;
}
public void display() {
JFrame w = setup(700,700);
JPanel contentPane = new JPanel();
JButton textFeld = new JButton("Ich bin eine Beschriftung und lebe in einem Button");
contentPane.add(textFeld);
JTextField text = new JFormattedTextField("Hello, I am a formatted Text field \nThis Linebreak may work");
contentPane.add(text);
JLabel vorname = new JLabel("Vorname");
JLabel nachname = new JLabel("Nachname");
JLabel MatrikelNr = new JLabel("MatrikelNR.");
JLabel password = new JLabel("Passwort");
JLabel longText = new JLabel("Langer Text");
JTextField feldVorName = new JTextField(10);
JTextField feldNachName = new JTextField(10);
JPasswordField feldPassw = new JPasswordField(10);
JTextArea feldLongText = new JTextArea(20,15);
contentPane.add(vorname);
contentPane.add(feldVorName);
contentPane.add(nachname);
contentPane.add(feldNachName);
contentPane.add(password);
contentPane.add(feldPassw);
Icon i = new ImageIcon("Medien/Bilder/HackerUnicorn_Schäbig.png");
JButton grafik = new JButton(i);
contentPane.add(grafik);
contentPane.add((MatrikelNr));
contentPane.add(longText);
contentPane.add(feldLongText);
w.setContentPane(contentPane);
JMenuBar menuebar = new JMenuBar();
JMenu file = new JMenu("file");
JMenu help = new JMenu("help");
menuebar.add(file);
menuebar.add(help);
JMenuItem fileOpen = new JMenuItem("open");
JMenuItem fileClose = new JMenuItem("close");
JMenuItem fileEdit = new JMenuItem("edit");
JMenuItem helpInfo = new JMenuItem("info");
JMenuItem helpUnsub = new JMenuItem("unsubscribe");
file.add(fileOpen);
file.add(fileEdit);
file.add(fileClose);
help.add(helpInfo);
help.add(helpUnsub);
w.setJMenuBar(menuebar);
}
}

246
src/part5/aufg.java Normal file
View File

@@ -0,0 +1,246 @@
package part5;
import javax.swing.*;
public class aufg {
private String title;
private int height;
private int width;
private JFrame window;
private JPanel contentPane;
private JMenuBar menubar;
public aufg(String title, int height, int width){
this.title = title;
this.width = width;
this.height = height;
this.window = new JFrame();
this.contentPane = new JPanel();
this.menubar = new JMenuBar();
}
public void display(boolean exitOnClose){
this.window.setTitle(this.title);
this.window.setSize(this.width, this.height);
this.window.setContentPane(this.contentPane);
this.window.setVisible(true);
if (exitOnClose){
this.window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
public void loadDesign2(){
addMenuBar();
addLabel("Von");
addLabeledTextField("Bahnhof/Haltestelle", false);
addImage("Medien/Bilder/info_I_tiny.png");
addLabel("Nach");
addLabeledTextField("Bahnhof/Haltestelle", false);
addButton("über");
addLabel("Hinfahrt");
addLabeledTextField("Datum", false);
addLabel("Rückfahrt");
addLabeledTextField("Uhrzeit", false);
// addDropdown(values = {"Abfahrt", "Ankunft"})
addLabeledTextField("Uhrzeit", false);
// addDropdown(values = {"Abfahrt", "Ankunft"})
addLabel("Angaben zur Preisberechnung");
addLabel("Reisende");
// addDropdown(values = {"1 Erwachsener", "1 Student"})
// addDropdown(values = {"Keine Ermäßigung", "20% Rabatt"})
// addDropDown(values = {"2. Klasse", "1. Klasse"})
addButton("Personen Hinzufügen");
addImage("Medien/Bilder/info_I_tiny.png");
addButton("Auslandspreise");
addImage("Medien/Bilder/info_I_tiny.png");
addLabel("Angaben zur Verbindung");
addLabel("Verkehrsmittel: ");
// addDropDown(values = {"Standartsuche", "Spezialsuche"})
addButton("Erweitert");
addImage("Medien/Bilder/info_I_tiny.png");
// addCheckBox(label = "schnelle Verbindung bevorzugen")
addImage("Medien/Bilder/info_I_tiny.png");
// addCheckBox(label = "Fahrradmitnahme")
addButton("Verbindung Suchen");
addButton("Neue Anfrage");
addButton("Mein Anfrageprofil");
}
public void loadDesign(){
addMenuBar();
addLabeledTextField("TextBox", true);
addLabeledPasswordField("Password", true);
addImage("Medien/Bilder/info_I_tiny.png");
addImage("Medien/Bilder/HackerUnicorn_Schäbig.png");
addLabeledRadioButtons("First Set of radiobuttons", new String[] {"Option1", "Choice2", "Variant3"}, true);
addLabeledRadioButtons("Second Group of Options", new String[] {"Maybe this?", "Or that"}, true);
// popUpInputText(new String[] {"Choice1", "Option2"});
popUpDropDown("Medien/Bilder/info_I_tiny.png",
"Title of my Window",
"choose your favourite",
new String[] {"Choice1", "Option2"},
"Option2");
}
public void addMenuBar(){
JMenu file = new JMenu("File");
JMenuItem fileOpen = new JMenuItem("Open");
JMenuItem fileEdit = new JMenuItem("Edit");
JMenuItem fileClose = new JMenuItem("Close");
file.add(fileOpen);
file.add(fileEdit);
file.add(fileClose);
JMenu help = new JMenu("Help");
JMenuItem helpInfo = new JMenuItem("Info");
JMenuItem helpUnsub = new JMenuItem("Unsubscribe");
help.add(helpInfo);
help.add(helpUnsub);
JMenu english = new JMenu("English");
JMenuItem englishChangeTo = new JMenuItem("Change to English");
english.add(englishChangeTo);
JMenu braile = new JMenu("Braile");
JMenuItem braileChangeTo = new JMenuItem("Change to Braile");
braile.add(braileChangeTo);
this.menubar.add(file);
this.menubar.add(help);
this.menubar.add(english);
this.menubar.add(braile);
this.window.setJMenuBar(this.menubar);
}
public void addLabel(String text){
this.contentPane.add(makeLabel(text));
}
public JLabel makeLabel(String text){
return new JLabel(text);
}
public void addTextField(int columns){
this.contentPane.add(makeTextField(columns));
}
public JTextField makeTextField(int columns){
return new JTextField(columns);
}
public void addLabeledTextField(String labelText, boolean makeVertical){
this.contentPane.add(makeLabeledTextField(labelText,makeVertical));
}
public Box makeLabeledTextField(String labelText, boolean makeVertical){
Box b;
if (makeVertical) {
b = Box.createVerticalBox();
}else{
b = Box.createHorizontalBox();
}
b.add(makeLabel(labelText));
b.add(makeTextField(10));
return b;
}
public void addPasswordField(){
this.contentPane.add(makePasswordField());
}
public JPasswordField makePasswordField(){
return new JPasswordField(10);
}
public void addLabeledPasswordField(String label, boolean makeVertical){
this.contentPane.add(makeLabeledPasswordField(label,makeVertical));
}
public Box makeLabeledPasswordField(String label, boolean makeVertical){
Box b;
if (makeVertical) {
b = Box.createVerticalBox();
}else{
b = Box.createHorizontalBox();
}
b.add(makeLabel(label));
b.add(makePasswordField());
return b;
}
public void addTextArea(int rows, int cols){
this.contentPane.add(makeTextArea(rows, cols));
}
public JTextArea makeTextArea(int rows, int cols){
return new JTextArea(rows, cols);
}
public void addImage(String link){
this.contentPane.add(makeImage(link));
}
public JButton makeImage(String link){
Icon i = new ImageIcon(link);
return new JButton(i);
}
public void addRadioButtons(String[] options){
this.contentPane.add(makeRadioButtons(options));
}
public Box makeRadioButtons(String[] options){
Box b = Box.createVerticalBox();
ButtonGroup group = new ButtonGroup();
// this.contentPane.setLayout(new FlowLayout()); Don't know what this does,
// Can't be bothered to look it up
// Can be bothered to type this tho
for (String option: options){
JRadioButton button = new JRadioButton(option);
b.add(button);
group.add(button);
}
b.add(Box.createVerticalStrut(10));
return b;
}
public void addButton(String text){
this.contentPane.add(makeButton(text));
}
public JButton makeButton(String text){
return new JButton(text);
}
public void addLabeledRadioButtons(String label, String[] options, boolean makeVertical){
this.contentPane.add(makeLabeledRadioButtons(label, options, makeVertical));
}
public Box makeLabeledRadioButtons(String label, String[] options, boolean makeVertical){
Box b;
if (makeVertical) {
b = Box.createVerticalBox();
}else{
b = Box.createHorizontalBox();
}
b.add(makeLabel(label));
b.add(makeRadioButtons(options));
return b;
}
public String popUpInputText(String[] values){
return (String) JOptionPane.showInputDialog(this.contentPane, values);
}
public String popUpDropDown(String iconLink, String title, String message, String[] values, String initialSelection){
return (String) JOptionPane.showInputDialog(
this.contentPane,
message,
title,
JOptionPane.INFORMATION_MESSAGE,
new ImageIcon(iconLink),
values,
initialSelection);
}
}