Add Lottery, ComponentFrame, CurrencyCalculator, TextFrame, and TextfileViewer classes

This commit is contained in:
Dominik 2025-05-28 08:27:39 +02:00
parent c41409b9d9
commit d0a8edecfe
6 changed files with 363 additions and 1 deletions

1
.gitignore vendored
View file

@ -1,3 +1,4 @@
*.class
*.jar
.devcontainer
/*.txt

View file

@ -0,0 +1,30 @@
package de.dhbwka.java.exercise.collections;
import java.util.HashSet;
import java.util.Set;
public class Lottery {
Set<Integer> lotteryNumbers = new HashSet<>();
Integer zusatzZahl;
public Lottery() {
while (lotteryNumbers.size() < 7) {
int number = (int) (Math.random() * 49) + 1;
zusatzZahl = number;
lotteryNumbers.add(number);
}
lotteryNumbers.remove(zusatzZahl);
String[] lotteryNumbersArray = lotteryNumbers.stream()
.sorted()
.map(String::valueOf)
.toArray(String[]::new);
System.out.println("Die Lottozahlen sind: " + String.join(", ", lotteryNumbersArray));
System.out.println("Die Zusatzzahl ist: " + zusatzZahl);
}
public static void main(String[] args) {
new Lottery();
}
}

View file

@ -0,0 +1,52 @@
package de.dhbwka.java.exercise.ui;
import javax.swing.*;
public class ComponentFrame extends JFrame {
public static void main(String[] args) {
new ComponentFrame();
}
public ComponentFrame() {
this.setTitle("Title");
this.setSize(600, 200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTabbedPane tabbedPane = new JTabbedPane();
JPanel panel1 = new JPanel();
panel1.add(new JLabel("Label"));
panel1.add(new JTextField("TextField", 15));
panel1.add(new JPasswordField("Password", 15));
panel1.add(new JButton("Btn"));
panel1.add(new JToggleButton("Toggle"));
panel1.add(new JCheckBox("Box"));
panel1.add(new JComboBox<String>(new String[] { "Item 1", "Item 2", "Item 3" }));
JRadioButton radioButton1 = new JRadioButton("Radio 1");
panel1.add(radioButton1);
JRadioButton radioButton2 = new JRadioButton("Radio 2");
panel1.add(radioButton2);
JRadioButton radioButton3 = new JRadioButton("Radio 3");
panel1.add(radioButton3);
ButtonGroup group = new ButtonGroup();
group.add(radioButton1);
group.add(radioButton2);
group.add(radioButton3);
panel1.add(new JTextArea("TextArea", 5, 20));
tabbedPane.addTab("Tab 1", panel1);
JPanel panel2 = new JPanel();
panel2.add(new JLabel("Label 2"));
panel2.add(new JColorChooser());
panel2.add(new JSpinner());
panel2.add(new JSlider());
panel2.add(new JProgressBar());
panel2.add(new JList<String>(new String[] { "List 1", "List 2", "List 3" }));
tabbedPane.addTab("Tab 2", panel2);
this.add(tabbedPane);
this.pack();
this.setLocationRelativeTo(null);
this.setVisible(true);
}
}

View file

@ -0,0 +1,128 @@
package de.dhbwka.java.exercise.ui;
import java.awt.Component;
import java.awt.Container;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.*;
public class CurrencyCalculator extends JFrame {
public static void main(String[] args) {
new CurrencyCalculator();
}
public CurrencyCalculator() {
initComponents();
addEventListeners();
}
private static void addComponent(Container cont, Component c,
int x, int y, int width, int height, double weightx, double weighty) {
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.BOTH;
gbc.gridx = x;
gbc.gridy = y;
gbc.gridwidth = width;
gbc.gridheight = height;
gbc.weightx = weightx;
gbc.weighty = weighty;
cont.add(c, gbc);
}
JTextField amountField = new JTextField();
JButton cancelButton = new JButton("Cancel");
JButton convertButton = new JButton("Convert");
String[] currencies = { "EUR", "USD", "GBP", "CHF", "DM" };
double[] rates = { 1.0, 0.90054095, 1.1896249, 1.0711047, 0.51129 };
JComboBox<String> currencyBoxFrom = new JComboBox<>(currencies);
JComboBox<String> currencyBoxTo = new JComboBox<>(currencies);
private void initComponents() {
setTitle("Currency Calculator");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setSize(400, 300);
JPanel panel = new JPanel();
panel.setLayout(new GridBagLayout());
addComponent(panel, amountField, 0, 0, 4, 1, 1.0, 0.0);
addComponent(panel, currencyBoxFrom, 0, 1, 1, 1, 0.0, 0.0);
addComponent(panel, currencyBoxTo, 1, 1, 1, 1, 0.0, 0.0);
addComponent(panel, convertButton, 2, 1, 1, 1, 0.0, 0.0);
addComponent(panel, cancelButton, 3, 1, 1, 1, 0.0, 0.0);
add(panel);
pack();
setVisible(true);
}
private void addEventListeners() {
convertButton.addActionListener(e -> {
String from = (String) currencyBoxFrom.getSelectedItem();
String to = (String) currencyBoxTo.getSelectedItem();
convertCurrency(from, to);
});
cancelButton.addActionListener(e -> {
this.dispose();
});
};
private void convertCurrency(String from, String to) {
// get the amount from the text field
String amountText = amountField.getText();
double amount = 0;
try {
amount = Double.parseDouble(amountText);
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(this, "Invalid amount", "Error",
JOptionPane.ERROR_MESSAGE);
return;
}
// convert the amount to intermediate currency (EUR)
double intermediateAmount = 0;
int fromIndex = -1;
for (int i = 0; i < currencies.length; i++) {
if (currencies[i].equals(from)) {
fromIndex = i;
break;
}
}
if (fromIndex == -1) {
JOptionPane.showMessageDialog(this, "Invalid currency", "Error",
JOptionPane.ERROR_MESSAGE);
return;
}
// convert the amount to EUR
intermediateAmount = amount * rates[fromIndex];
// convert the intermediate amount to the target currency
double targetAmount = 0;
int toIndex = -1;
for (int i = 0; i < currencies.length; i++) {
if (currencies[i].equals(to)) {
toIndex = i;
break;
}
}
if (toIndex == -1) {
JOptionPane.showMessageDialog(this, "Invalid currency", "Error",
JOptionPane.ERROR_MESSAGE);
return;
}
// convert the intermediate amount to the target currency
targetAmount = intermediateAmount / rates[toIndex];
// show the result in a message dialog
String message = String.format("Converted amount: %.2f %s", targetAmount, to);
JOptionPane.showMessageDialog(this, message, "Result",
JOptionPane.INFORMATION_MESSAGE);
// clear the text field
amountField.setText("");
// set focus to the text field
amountField.requestFocus();
}
}

View file

@ -0,0 +1,62 @@
package de.dhbwka.java.exercise.ui;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import javax.swing.*;
public class TextFrame extends JFrame {
public static void main(String[] args) {
if (args.length != 3 || args[0].equals("-h")) {
System.err.println("Usage: java TextFrame <filename> <width> <height>");
System.exit(1);
}
try {
int width = Integer.parseInt(args[1]);
int height = Integer.parseInt(args[2]);
new TextFrame(width, height, args[0]);
} catch (NumberFormatException e) {
System.err.println("Width and height must be integers.");
System.exit(1);
}
}
public TextFrame(int width, int height, String fileName) {
// Load the text file
String text = loadTextFile(fileName);
if (text == null) {
System.err.println("Error loading file: " + fileName);
return;
}
// Create the text area
JTextArea textArea = new JTextArea(text);
textArea.setLineWrap(true);
textArea.setWrapStyleWord(true);
JScrollPane scrollPane = new JScrollPane(textArea);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
// Create the frame
this.setTitle("TextFrame");
this.setSize(width, height);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
this.add(scrollPane);
this.setVisible(true);
}
private String loadTextFile(String fileName) {
StringBuilder text = new StringBuilder();
try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) {
String line;
while ((line = reader.readLine()) != null) {
text.append(line).append("\n");
}
} catch (IOException e) {
e.printStackTrace();
return null;
}
return text.toString();
}
}

View file

@ -0,0 +1,89 @@
package de.dhbwka.java.exercise.ui;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.awt.*;
import javax.swing.*;
import javax.swing.filechooser.*;
public class TextfileViewer {
public static void main(String[] args) {
new TextfileViewer();
}
public TextfileViewer() {
initComponents();
}
private void initComponents() {
JFileChooser fc = new javax.swing.JFileChooser();
fc.setFileFilter(new FileFilter() {
@Override
public boolean accept(File f) {
return f.isDirectory() ||
f.getName().toLowerCase().endsWith(".txt");
}
@Override
public String getDescription() {
return "Text Files";
}
});
int state = fc.showOpenDialog(null);
if (state == JFileChooser.APPROVE_OPTION) {
this.openFile(fc.getSelectedFile(), "labels");
this.openFile(fc.getSelectedFile(), "textArea");
} else {
this.error("No file selected");
}
}
private void openFile(File file, String mode) {
JFrame frame = new JFrame("Textfile Viewer - " + file.getName());
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setLocationRelativeTo(null);
if (mode.equals("labels")) {
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(10, 1, 2, 2));
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
String line;
int i = 0;
while ((line = br.readLine()) != null && i++ < 10) {
JLabel label = new JLabel(line);
panel.add(label);
}
} catch (IOException e) {
e.printStackTrace();
}
frame.add(panel);
frame.setSize(400, 300);
frame.setVisible(true);
} else if (mode.equals("textArea")) {
JTextArea textArea = new JTextArea();
textArea.setEditable(false);
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
String line;
while ((line = br.readLine()) != null) {
textArea.append(line + "\n");
}
} catch (IOException e) {
e.printStackTrace();
}
JScrollPane scrollPane = new JScrollPane(textArea);
frame.add(scrollPane);
frame.setSize(400, 300);
frame.setVisible(true);
}
}
private void error(String message) {
JOptionPane.showMessageDialog(null, message, "Error", JOptionPane.ERROR_MESSAGE);
}
}