Vorlesung 16 / Aufgabe 1

This commit is contained in:
Sebastian Brosch 2024-06-11 14:47:57 +02:00
parent 1f0c7abff6
commit 352a9909ed
2 changed files with 299 additions and 0 deletions

View File

@ -0,0 +1,18 @@
package VL16.Aufgabe01;
import javax.swing.JFrame;
/**
* Vorlesung 16 / Aufgabe 1
*
* @author Sebastian Brosch
*/
public class Aufgabe01 {
public static void main(String[] args) {
Screenshot screenshot = new Screenshot("Screenshot mit Zusammenfassung");
screenshot.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
screenshot.setSize(690, 390);
screenshot.setResizable(false);
screenshot.setVisible(true);
}
}

View File

@ -0,0 +1,281 @@
package VL16.Aufgabe01;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.UIManager;
import java.awt.event.WindowListener;
import java.awt.Color;
import java.awt.Font;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class Screenshot extends JFrame implements ActionListener {
// Controls (used in events).
JButton btnVerbindungSuchen = new JButton("Verbindung suchen");
JTextField txtStartZielVon = new JTextField();
JTextField txtStartZielNach = new JTextField();
JTextField txtReisedatumHinfahrtDatum = new JTextField();
JTextField txtReisedatumHinfahrtUhrzeit = new JTextField();
String uhrzeitTypes[] = { "Ankunft", "Abfahrt" };
JComboBox<String> cmbReisedatumHinfahrtUhrzeitType = new JComboBox<String>(uhrzeitTypes);
JTextField txtReisedatumRueckfahrtDatum = new JTextField();
JTextField txtReisedatumRueckfahrtUhrzeit = new JTextField();
JComboBox<String> cmbReisedatumRueckfahrtUhrzeitType = new JComboBox<String>(uhrzeitTypes);
String personType[] = { "1 Erwachsener", "2 Erwachsene" };
JComboBox<String> cmbPreisberechnungPersonType = new JComboBox<String>(personType);
String rabattType[] = { "Keine Ermäßigung", "Bahn-Card 25", "Bahn-Card 50" };
JComboBox<String> cmbPreisberechnungRabattType = new JComboBox<String>(rabattType);
String klasseType[] = { "1. Klasse", "2. Klasse" };
JComboBox<String> cmbPreisberechnungKlasse = new JComboBox<String>(klasseType);
String searchType[] = { "Standardsuche", "Erweiterte Suche" };
JComboBox<String> cmbVerbindungSucheType = new JComboBox<String>(searchType);
JCheckBox chkVerbindungSchnelleVerbindung = new JCheckBox();
JCheckBox chkVerbindungFahrrad = new JCheckBox();
Screenshot(String title) {
super(title);
JTabbedPane tcMain = new JTabbedPane();
JPanel pnlVerbindungssuche = new JPanel();
pnlVerbindungssuche.setLayout(null);
JPanel pnlErweiterteSuche = new JPanel();
tcMain.addTab("Verbindungssuche", pnlVerbindungssuche);
tcMain.addTab("Erweiterte Suche", pnlErweiterteSuche);
JTextArea txtLanguageMenu = new JTextArea();
txtLanguageMenu.setText("deutsch | english | francais | italiano");
txtLanguageMenu.setBounds(480, 0, 200, 20);
this.getContentPane().add(txtLanguageMenu);
insertHeading("Start & Ziel", pnlVerbindungssuche, 0);
JLabel lblStartZielVon = new JLabel();
lblStartZielVon.setText("Von:");
lblStartZielVon.setBounds(0, 25, 100, 25);
pnlVerbindungssuche.add(lblStartZielVon);
JLabel lblStartZielNach = new JLabel();
lblStartZielNach.setText("Nach:");
lblStartZielNach.setBounds(0, 50, 100, 25);
pnlVerbindungssuche.add(lblStartZielNach);
JLabel lblStartZielBahnhofHaltestelleVon = new JLabel();
lblStartZielBahnhofHaltestelleVon.setText("Bahnhof/Haltestelle");
lblStartZielBahnhofHaltestelleVon.setBounds(100, 25, 150, 25);
lblStartZielBahnhofHaltestelleVon.setFont(lblStartZielBahnhofHaltestelleVon.getFont().deriveFont(Font.PLAIN));
pnlVerbindungssuche.add(lblStartZielBahnhofHaltestelleVon);
JLabel lblStartZielBahnhofHaltestelleNach = new JLabel();
lblStartZielBahnhofHaltestelleNach.setText("Bahnhof/Haltestelle");
lblStartZielBahnhofHaltestelleNach.setBounds(100, 50, 150, 25);
lblStartZielBahnhofHaltestelleNach.setFont(lblStartZielBahnhofHaltestelleNach.getFont().deriveFont(Font.PLAIN));
pnlVerbindungssuche.add(lblStartZielBahnhofHaltestelleNach);
txtStartZielVon.setBounds(250, 27, 300, 20);
txtStartZielVon.setBorder(BorderFactory.createLineBorder(Color.black));
pnlVerbindungssuche.add(txtStartZielVon);
txtStartZielNach.setBounds(250, 52, 300, 20);
txtStartZielNach.setBorder(BorderFactory.createLineBorder(Color.BLACK));
pnlVerbindungssuche.add(txtStartZielNach);
pnlVerbindungssuche.add(getInfoIcon(555, 27));
JButton btnStartZielUeber = new JButton();
btnStartZielUeber.setText("Über");
btnStartZielUeber.setBounds(555, 52, 65, 20);
pnlVerbindungssuche.add(btnStartZielUeber);
insertHeading("Reisedatum und -zeit", pnlVerbindungssuche, 75);
JLabel lblReisedatumHinfahrt = new JLabel();
lblReisedatumHinfahrt.setText("Hinfahrt:");
lblReisedatumHinfahrt.setBounds(0, 100, 100, 25);
pnlVerbindungssuche.add(lblReisedatumHinfahrt);
JLabel lblReisedatumHinfahrtDatum = new JLabel();
lblReisedatumHinfahrtDatum.setText("Datum:");
lblReisedatumHinfahrtDatum.setBounds(100, 100, 75, 25);
lblReisedatumHinfahrtDatum.setFont(lblReisedatumHinfahrtDatum.getFont().deriveFont(Font.PLAIN));
pnlVerbindungssuche.add(lblReisedatumHinfahrtDatum);
JLabel lblReisedatumHinfahrtUhrzeit = new JLabel();
lblReisedatumHinfahrtUhrzeit.setText("Uhrzeit:");
lblReisedatumHinfahrtUhrzeit.setBounds(100, 125, 50, 25);
lblReisedatumHinfahrtUhrzeit.setFont(lblReisedatumHinfahrtUhrzeit.getFont().deriveFont(Font.PLAIN));
pnlVerbindungssuche.add(lblReisedatumHinfahrtUhrzeit);
txtReisedatumHinfahrtDatum.setBounds(150, 102, 100, 20);
txtReisedatumHinfahrtDatum.setBorder(BorderFactory.createLineBorder(Color.black));
pnlVerbindungssuche.add(txtReisedatumHinfahrtDatum);
txtReisedatumHinfahrtUhrzeit.setBounds(150, 127, 50, 20);
txtReisedatumHinfahrtUhrzeit.setBorder(BorderFactory.createLineBorder(Color.black));
pnlVerbindungssuche.add(txtReisedatumHinfahrtUhrzeit);
cmbReisedatumHinfahrtUhrzeitType.setBounds(205, 127, 100, 20);
pnlVerbindungssuche.add(cmbReisedatumHinfahrtUhrzeitType);
JSeparator sepReisedatum = new JSeparator(SwingConstants.VERTICAL);
sepReisedatum.setBounds(315, 100, 1, 50);
sepReisedatum.setBackground(Color.LIGHT_GRAY);
pnlVerbindungssuche.add(sepReisedatum);
JLabel lblReisedatumRueckfahrt = new JLabel();
lblReisedatumRueckfahrt.setText("Rückfahrt:");
lblReisedatumRueckfahrt.setBounds(325, 100, 100, 25);
pnlVerbindungssuche.add(lblReisedatumRueckfahrt);
JLabel lblReisedatumRueckfahrtDatum = new JLabel();
lblReisedatumRueckfahrtDatum.setText("Datum:");
lblReisedatumRueckfahrtDatum.setBounds(425, 100, 75, 25);
lblReisedatumRueckfahrtDatum.setFont(lblReisedatumRueckfahrtDatum.getFont().deriveFont(Font.PLAIN));
pnlVerbindungssuche.add(lblReisedatumRueckfahrtDatum);
JLabel lblReisedatumRueckfahrtUhrzeit = new JLabel();
lblReisedatumRueckfahrtUhrzeit.setText("Uhrzeit:");
lblReisedatumRueckfahrtUhrzeit.setBounds(425, 125, 50, 25);
lblReisedatumRueckfahrtUhrzeit.setFont(lblReisedatumRueckfahrtUhrzeit.getFont().deriveFont(Font.PLAIN));
pnlVerbindungssuche.add(lblReisedatumRueckfahrtUhrzeit);
txtReisedatumRueckfahrtDatum.setBounds(475, 102, 100, 20);
txtReisedatumRueckfahrtDatum.setBorder(BorderFactory.createLineBorder(Color.black));
pnlVerbindungssuche.add(txtReisedatumRueckfahrtDatum);
txtReisedatumRueckfahrtUhrzeit.setBounds(475, 127, 50, 20);
txtReisedatumRueckfahrtUhrzeit.setBorder(BorderFactory.createLineBorder(Color.black));
pnlVerbindungssuche.add(txtReisedatumRueckfahrtUhrzeit);
cmbReisedatumRueckfahrtUhrzeitType.setBounds(530, 127, 100, 20);
pnlVerbindungssuche.add(cmbReisedatumRueckfahrtUhrzeitType);
insertHeading("Angaben zur Preisberechnung", pnlVerbindungssuche, 150);
JLabel lblPreisberechnungReisende = new JLabel();
lblPreisberechnungReisende.setText("Reisende:");
lblPreisberechnungReisende.setBounds(0, 175, 100, 25);
pnlVerbindungssuche.add(lblPreisberechnungReisende);
cmbPreisberechnungPersonType.setBounds(100, 177, 205, 20);
pnlVerbindungssuche.add(cmbPreisberechnungPersonType);
JButton btnPreisberechnungAdd = new JButton();
btnPreisberechnungAdd.setText("Personen hinzufügen");
btnPreisberechnungAdd.setBounds(100, 202, 160, 20);
pnlVerbindungssuche.add(btnPreisberechnungAdd);
pnlVerbindungssuche.add(getInfoIcon(265, 202));
cmbPreisberechnungRabattType.setBounds(315, 177, 210, 20);
pnlVerbindungssuche.add(cmbPreisberechnungRabattType);
JButton btnPreisberechnungAuslandspreise = new JButton();
btnPreisberechnungAuslandspreise.setText("Auslandspreise");
btnPreisberechnungAuslandspreise.setBounds(315, 202, 125, 20);
pnlVerbindungssuche.add(btnPreisberechnungAuslandspreise);
pnlVerbindungssuche.add(getInfoIcon(445, 202));
cmbPreisberechnungKlasse.setBounds(530, 177, 100, 20);
pnlVerbindungssuche.add(cmbPreisberechnungKlasse);
insertHeading("Angaben zur Verbindung", pnlVerbindungssuche, 225);
JLabel lblVerbindungVerkehrsmittel = new JLabel();
lblVerbindungVerkehrsmittel.setText("Verkehrsmittel:");
lblVerbindungVerkehrsmittel.setBounds(0, 250, 100, 25);
pnlVerbindungssuche.add(lblVerbindungVerkehrsmittel);
cmbVerbindungSucheType.setBounds(100, 252, 205, 20);
pnlVerbindungssuche.add(cmbVerbindungSucheType);
JButton btnVerbindungAdvanced = new JButton();
btnVerbindungAdvanced.setText("Erweitert");
btnVerbindungAdvanced.setBounds(315, 252, 100, 20);
pnlVerbindungssuche.add(btnVerbindungAdvanced);
pnlVerbindungssuche.add(getInfoIcon(420, 252));
chkVerbindungSchnelleVerbindung.setText("schnelle Verbindungen bevorzugen");
chkVerbindungSchnelleVerbindung.setBounds(100, 277, 235, 20);
pnlVerbindungssuche.add(chkVerbindungSchnelleVerbindung);
pnlVerbindungssuche.add(getInfoIcon(335, 277));
chkVerbindungFahrrad.setText("Fahrradmitnahme");
chkVerbindungFahrrad.setBounds(370, 277, 150, 20);
pnlVerbindungssuche.add(chkVerbindungFahrrad);
JSeparator sepControls = new JSeparator(SwingConstants.HORIZONTAL);
sepControls.setBounds(0, 300, 670, 1);
sepControls.setBackground(Color.LIGHT_GRAY);
pnlVerbindungssuche.add(sepControls);
btnVerbindungSuchen.addActionListener(this);
btnVerbindungSuchen.setBounds(0, 305, 150, 20);
pnlVerbindungssuche.add(btnVerbindungSuchen);
JButton btnVerbindungNeueAnfrage = new JButton();
btnVerbindungNeueAnfrage.setText("Neue Anfrage");
btnVerbindungNeueAnfrage.setBounds(155, 305, 125, 20);
pnlVerbindungssuche.add(btnVerbindungNeueAnfrage);
JButton btnMeinAnfrageprofil = new JButton();
btnMeinAnfrageprofil.setText("Mein Anfrageprofil");
btnMeinAnfrageprofil.setBounds(520, 305, 150, 20);
pnlVerbindungssuche.add(btnMeinAnfrageprofil);
this.getContentPane().add(tcMain);
WindowListener closeListener = new WindowAdapter() {
public void windowClosing(WindowEvent event) {
System.exit(0);
}
};
this.addWindowListener(closeListener);
}
/**
* Method to insert a heading to the JFrame.
*
* @param title Title of the heading.
* @param panel The parent panel of the heading.
* @param top The absolute top position of the heading.
*/
private void insertHeading(String title, JPanel panel, int top) {
JLabel lblStartZiel = new JLabel();
lblStartZiel.setText(title);
lblStartZiel.setOpaque(true);
lblStartZiel.setBackground(Color.decode("#ceccfe"));
lblStartZiel.setForeground(Color.decode("#1b0897"));
lblStartZiel.setBounds(0, top, 670, 25);
panel.add(lblStartZiel);
}
/**
* Get a JLabel with displaying the info icon.
*
* @param left The position on the x-axis.
* @param top The position on the y-axis.
* @return The label with info icon.
*/
private JLabel getInfoIcon(int left, int top) {
ImageIcon icon = (ImageIcon) UIManager.get("OptionPane.informationIcon");
Image imgFit = icon.getImage().getScaledInstance(20, 20, java.awt.Image.SCALE_SMOOTH);
JLabel lblInfoIcon = new JLabel(new ImageIcon(imgFit));
lblInfoIcon.setBounds(left, top, 20, 20);
return lblInfoIcon;
}
/**
* Method to react to events of the JFrame.
*
* @param event The event to react.
*/
public void actionPerformed(ActionEvent event) {
Object source = event.getSource();
if (source == btnVerbindungSuchen) {
String infoVerbindung = "";
infoVerbindung += String.format("Verbindung von %s nach %s.\n", txtStartZielVon.getText(), txtStartZielNach.getText());
infoVerbindung += String.format("Hinfahrt: %s am %s um %s Uhr.\n", cmbReisedatumHinfahrtUhrzeitType.getSelectedItem(), txtReisedatumHinfahrtDatum.getText(), txtReisedatumHinfahrtUhrzeit.getText());
infoVerbindung += String.format("Rückfahrt: %s am %s um %s Uhr.\n", cmbReisedatumRueckfahrtUhrzeitType.getSelectedItem(), txtReisedatumRueckfahrtDatum.getText(), txtReisedatumRueckfahrtUhrzeit.getText());
infoVerbindung += String.format("Reisende: %s (%s)\n", cmbPreisberechnungPersonType.getSelectedItem(), cmbPreisberechnungKlasse.getSelectedItem());
infoVerbindung += String.format("Ermäßigung: %s\n", cmbPreisberechnungRabattType.getSelectedItem());
if (chkVerbindungSchnelleVerbindung.isSelected()) {
if (chkVerbindungFahrrad.isSelected()) {
infoVerbindung += "Es soll die schnellste Verbindung mit Fahrradmitnahme gesucht werden.\n";
} else {
infoVerbindung += "Es soll die schnellste Verbindung gesucht werden.\n";
}
} else if (chkVerbindungFahrrad.isSelected()) {
infoVerbindung += "Es sollen nur Verbindungen mit Fahrradmitnahme angezeigt werden.\n";
}
JOptionPane.showMessageDialog(this, infoVerbindung, cmbVerbindungSucheType.getSelectedItem().toString(), JOptionPane.INFORMATION_MESSAGE);
}
}
}