diff --git a/VL16/Aufgabe01/Aufgabe01.java b/VL16/Aufgabe01/Aufgabe01.java new file mode 100644 index 0000000..9a34843 --- /dev/null +++ b/VL16/Aufgabe01/Aufgabe01.java @@ -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); + } +} diff --git a/VL16/Aufgabe01/Screenshot.java b/VL16/Aufgabe01/Screenshot.java new file mode 100644 index 0000000..43ce634 --- /dev/null +++ b/VL16/Aufgabe01/Screenshot.java @@ -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 cmbReisedatumHinfahrtUhrzeitType = new JComboBox(uhrzeitTypes); + JTextField txtReisedatumRueckfahrtDatum = new JTextField(); + JTextField txtReisedatumRueckfahrtUhrzeit = new JTextField(); + JComboBox cmbReisedatumRueckfahrtUhrzeitType = new JComboBox(uhrzeitTypes); + String personType[] = { "1 Erwachsener", "2 Erwachsene" }; + JComboBox cmbPreisberechnungPersonType = new JComboBox(personType); + String rabattType[] = { "Keine Ermäßigung", "Bahn-Card 25", "Bahn-Card 50" }; + JComboBox cmbPreisberechnungRabattType = new JComboBox(rabattType); + String klasseType[] = { "1. Klasse", "2. Klasse" }; + JComboBox cmbPreisberechnungKlasse = new JComboBox(klasseType); + String searchType[] = { "Standardsuche", "Erweiterte Suche" }; + JComboBox cmbVerbindungSucheType = new JComboBox(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); + } + } +}