//MainGUI.java
package de.BenzinVerbrauchsRechner.GUI;
import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.File;
import java.util.Iterator;
import java.util.Set;
import javax.swing.BoxLayout;
import javax.swing.ButtonGroup;
import javax.swing.DefaultComboBoxModel;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import de.BenzinVerbrauchsRechner.Berechnung.Calculate;
import de.BenzinVerbrauchsRechner.Main.Main;
/**
* <html><h2>Erzeugt das Hauptfenster des BenzinVerbrauchsRechners.</h2> <h3>
* Erstellte Inhalte</h3>
* <ul>
* <li>
* <h4>Menü</h4>
* <ul>
* <li>Datei</li>
* <ul>
* <li>neues Fahrzeug</li>
* <li>Beenden</li>
* </ul>
* <li>Hilfe</li>
* <ul>
* <li>Hilfe</li>
* <li>Info</li>
* </ul>
* </ul> <li>Tabs</li>
* <ul>
* <li>Berechnen</li>
* <li>Statistik</li>
* </ul>
* <li>Inhaltsbereiche</li>
* <ul>
* <li>Als Layout wurde das GridBagLayout verwendet.
* </ul>
* </ul>
*
*
*
* </ul>
*
* </html>
*
* @author Daniel Schaschinek und Christopher Auth
* @version 0.2 pre
*/
public class MainGUI {
private JFrame frame;
public static MainGUI objMainGUI;
private JPanel berechnung;
private JPanel statistik;
public DefaultComboBoxModel fahrzeuge_JCombo;
JPanel radioPanel;
JButton berechnen;
JTextField datum_tf;
JTextField alt_KM_tf;
JTextField kM_tf;
JTextField benzin_tf;
JTextField liter_tf;
JRadioButton e10_radio;
JRadioButton super_radio;
JRadioButton super_Plus_radio;
JTextField last_verbrauch;
JTextField verbrauch;
JTextField last_kosten;
JTextField kosten;
/**
* @param args
* Zuerst nichts
*/
// public static void main(String[] args) {
// MainGUI main = new MainGUI();
// main.frame.setResizable(false);
// main.frame.setVisible(true);
//
// }
public JFrame getFrame() {
return frame;
}
/**
* Ruft die Initializierungsmethode Methode auf.
*/
public MainGUI() {
initialize();
frame.setVisible(true);
}
/**
* Die Initialisierungsmehtode ruft folgende Methoden auf.<br>
* setLook()<br>
* setWindow()<br>
* setMenuBar()<br>
* setBerechnung()<br>
*/
private void initialize() {
setWindow();
setMenuBar();
setCombo();
setTabbedPane();
setBerechnung();
setStatistik();
}
/**
*
*/
public void setCombo() {
fahrzeuge_JCombo = new DefaultComboBoxModel();
try {
Set<String> set = Main.data.fahrzeuge.keySet();
Iterator<String> iter = set.iterator();
while (iter.hasNext()) {
this.fahrzeuge_JCombo.addElement((String) iter.next());
}
} catch (NullPointerException e) {
Main.textAusgaben(
"Kein Fahrzeug in der HashMap vorhanden <MainGUI>", true);
this.fahrzeuge_JCombo.addElement(" ");
}
Main.textAusgaben(("Fahrzeug_JCombo null? " + (fahrzeuge_JCombo==null)), true);
// fahrzeuge_JCombo.addElement(Main.data.fahrzeuge.keySet());
// fahrzeuge_JCombo.addElement("GP-AB-123");
// fahrzeuge_JCombo.addElement("GP-BA-321");
}
public DefaultComboBoxModel getCombo() {
return fahrzeuge_JCombo;
}
/**
*
*/
private void setStatistik() {
JLabel fahrzeug;
JLabel last_verbrauch;
JLabel verbrauch;
JLabel last_kosten;
JLabel kosten;
GridBagConstraints gbc = new GridBagConstraints();
// gbc.anchor = GridBagConstraints.NORTHWEST;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.insets = new Insets(5, 5, 5, 5);
gbc.gridx = 0;
gbc.gridy = 0;
fahrzeug = new JLabel("Fahrzeug");
fahrzeug.setToolTipText("Wählen Sie Ihr Fahrzeug");
statistik.add(fahrzeug, gbc);
gbc.gridy++;
last_verbrauch = new JLabel(
"<html><p>Spritverbrauch<br> letzte Tankfüllung</p></html>");
last_verbrauch.setToolTipText("Letzter Spritverbrauch");
statistik.add(last_verbrauch, gbc);
gbc.gridy++;
verbrauch = new JLabel("Gesamtverbrauch");
verbrauch.setToolTipText("Gesamtverbrauch");
statistik.add(verbrauch, gbc);
// Spalte 2
gbc.gridx++;
gbc.gridy = 0;
gbc.weightx = 0.5;
JComboBox fahrzeuge_Combo = new JComboBox(fahrzeuge_JCombo);
statistik.add(fahrzeuge_Combo, gbc);
gbc.gridy++;
gbc.insets = new Insets(5, 5, 5, 2);
this.last_verbrauch = new JTextField("", 10);
this.last_verbrauch.setEditable(false);
statistik.add(this.last_verbrauch, gbc);
gbc.gridy++;
gbc.insets = new Insets(5, 5, 5, 5);
this.verbrauch = new JTextField("", 10);
this.verbrauch.setEditable(false);
statistik.add(this.verbrauch, gbc);
gbc.gridx++;
gbc.weightx = 0;
gbc.gridy = 1;
// gbc.anchor = GridBagConstraints.CENTER;
gbc.insets = new Insets(5, 2, 5, 5);
statistik.add(new JLabel("l/100km"), gbc);
gbc.gridx++;
// gbc.anchor = GridBagConstraints.NORTHWEST;
gbc.gridy = 0;
gbc.insets = new Insets(5, 5, 5, 5);
gbc.gridy++;
last_kosten = new JLabel("Kosten");
statistik.add(last_kosten, gbc);
gbc.gridy++;
kosten = new JLabel("Gesamtkosten");
statistik.add(kosten, gbc);
gbc.gridx++;
gbc.gridy = 1;
gbc.weightx = 0.5;
this.last_kosten = new JTextField("", 10);
this.last_kosten.setEditable(false);
statistik.add(this.last_kosten, gbc);
gbc.gridy++;
this.kosten = new JTextField("", 10);
this.kosten.setEditable(false);
statistik.add(this.kosten, gbc);
JLabel lab = new JLabel(new ImageIcon(
"\\Projekt\\BenzinVerbrauchsRechner\\src\\Tankstelle.jpg"));
// lab.setBackground( new Color( 240, 240, 240));
lab.setOpaque(true);
gbc.gridx = 0;
gbc.gridy++;
gbc.gridwidth = 5;
gbc.weightx = 1.0;
gbc.weighty = 1.0;
gbc.fill = GridBagConstraints.BOTH;
statistik.add(lab, gbc);
}
/**
* Erstellt einen Tab Inhaltsbereich
*/
private void setTabbedPane() {
JTabbedPane tabPane = new JTabbedPane(JTabbedPane.TOP);
frame.getContentPane().add(tabPane, BorderLayout.CENTER);
new GridBagLayout();
berechnung = new JPanel();
berechnung.setLayout(new GridBagLayout());
tabPane.addTab("Berechnung", null, berechnung,
"Tragen Sie Ihre Tankdaten ein");
statistik = new JPanel();
statistik.setLayout(new GridBagLayout());
tabPane.addTab("Statistik", null, statistik,
"Sehen Sie Ihre Tankstatistik");
}
private void setBerechnung() {
JLabel datum_JLabel;
JLabel altKM_JLabel;
JLabel kM_JLabel;
JLabel benzinPreis_JLabel;
JLabel liter_JLabel;
GridBagConstraints gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.NORTHWEST;
gbc.insets = new Insets(5, 5, 5, 5);
gbc.fill = GridBagConstraints.HORIZONTAL; // HORIZONTAL
gbc.gridx = 0;
gbc.gridy = 0;
datum_JLabel = new JLabel("Datum");
berechnung.add(datum_JLabel, gbc);
gbc.gridy++;
altKM_JLabel = new JLabel("Alter KM-Stand");
berechnung.add(altKM_JLabel, gbc);
gbc.gridy++;
kM_JLabel = new JLabel("KM-Stand");
berechnung.add(kM_JLabel, gbc);
gbc.gridy++;
gbc.gridy++;
benzinPreis_JLabel = new JLabel("Benzin Preis");
berechnung.add(benzinPreis_JLabel, gbc);
gbc.gridy++;
liter_JLabel = new JLabel("Getankte Liter");
berechnung.add(liter_JLabel, gbc);
// Spalte 2
gbc.gridx++;
gbc.gridy = 0;
gbc.weightx = 0.5;
datum_tf = new JTextField("", 10);
berechnung.add(datum_tf, gbc);
gbc.gridy++;
alt_KM_tf = new JTextField(getAlterKm((String)fahrzeuge_JCombo.getSelectedItem()), 10);
alt_KM_tf.setEditable(false);
berechnung.add(alt_KM_tf, gbc);
gbc.gridy++;
kM_tf = new JTextField("", 10);
berechnung.add(kM_tf, gbc);
gbc.gridy++;
gbc.gridy++;
benzin_tf = new JTextField("", 10);
berechnung.add(benzin_tf, gbc);
gbc.gridy++;
liter_tf = new JTextField("", 10);
berechnung.add(liter_tf, gbc);
gbc.gridy++;
berechnen = new JButton("Berechnen");
berechnen.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
last_verbrauch.setText(Double.toString(Calculate.durchLiter(
Integer.parseInt(kM_tf.getText())
- Integer.parseInt(alt_KM_tf.getText()),
Double.parseDouble(liter_tf.getText()))));
}
});
berechnung.add(berechnen, gbc);
// Spalte 3
gbc.gridx++;
gbc.gridy = 0;
gbc.weightx = 0;
JLabel fahrzeug = new JLabel("Fahrzeug");
fahrzeug.setToolTipText("Wählen Sie Ihr Fahrzeug");
berechnung.add(fahrzeug, gbc);
// Spalte 4
gbc.gridx++;
gbc.weightx = 0.5;
final JComboBox fahrzeuge_Combo = new JComboBox(fahrzeuge_JCombo);
fahrzeuge_Combo.setToolTipText("Wählen Sie Ihr Fahrzeug");
// fahrzeuge_Combo.addActionListener(new ActionListener() {
//
// @Override
// public void actionPerformed(ActionEvent arg0) {
// if(Main.data.getFahrzeug((String)(fahrzeuge_Combo.getSelectedItem())).isBenziner()
// == true){
//
// radioPanel.setVisible(true);
// }else if
// (Main.data.getFahrzeug((String)(fahrzeuge_Combo.getSelectedItem())).isBenziner()
// == false){
//
// radioPanel.setVisible(false);
// }
//
// }
// });
fahrzeuge_Combo.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (Main.data.getFahrzeug(
(String) (fahrzeuge_Combo.getSelectedItem()))
.isBenziner() == true) {
radioPanel.setVisible(true);
} else {
radioPanel.setVisible(false);
}
}
});
berechnung.add(fahrzeuge_Combo, gbc);
// Spalte 5
gbc.gridy++;
gbc.gridy++;
gbc.gridheight = 4;
radioPanel = new JPanel();
radioPanel.setLayout(new BoxLayout(radioPanel, BoxLayout.Y_AXIS));
ButtonGroup radioGroup = new ButtonGroup();
e10_radio = new JRadioButton("E 10");
e10_radio.setToolTipText("Super Benzin mit 10% Bioethanol");
super_radio = new JRadioButton("Super 95");
super_radio.setToolTipText("Normales Super Benzin mit 5% Bioethanol");
super_Plus_radio = new JRadioButton("Super Plus");
super_Plus_radio.setToolTipText("Super Plus Benzin");
radioPanel.add(e10_radio);
radioPanel.add(super_radio);
radioPanel.add(super_Plus_radio);
radioGroup.add(e10_radio);
radioGroup.add(super_radio);
radioGroup.add(super_Plus_radio);
berechnung.add(radioPanel, gbc);
if (Main.data.getFahrzeug((String) fahrzeuge_Combo.getSelectedItem())
.isBenziner() == true) {
radioPanel.setVisible(true);
} else {
radioPanel.setVisible(false);
}
JLabel lab = new JLabel("");
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.weighty = 1.0; // request any extra vertical space
gbc.gridheight = 0;
gbc.gridx = 0; // aligned with button 2
gbc.gridy = 20; // third row
berechnung.add(lab, gbc);
}
/**
* @param selectedItem
* @return
*/
private String getAlterKm(String fahrzeug) {
String result;
try{
result = (Integer.toString(Main.data.getFahrzeug(fahrzeug).lastTanken().getKm()));
}catch (ArrayIndexOutOfBoundsException e){
result = Integer.toString(Main.data.getFahrzeug(fahrzeug).getKm());
}
return result;
}
/**
* Erstellt ein JMenuBar Objekt
*/
private void setMenuBar() {
JMenuBar menueLeiste = new JMenuBar();
JMenu file = new JMenu("Datei");
JMenu help = new JMenu("Hilfe");
JMenuItem newVehicle = new JMenuItem("neues Fahrzeug");
file.add(newVehicle);
newVehicle.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
new newFahrzeug().setVisible(true);
}
});
JMenuItem exit = new JMenuItem("Beenden");
exit.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
System.exit(1);
}
});
file.add(exit);
JMenuItem helpItem = new JMenuItem("Hilfe");
help.add(helpItem);
helpItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
JOptionPane.showMessageDialog(null,
"Es ist momentan noch keine Hilfeseite eingerichtet",
"Hilfe", 1);
}
});
JMenuItem zuruecksetzten = new JMenuItem("Zurücksetzten");
zuruecksetzten
.setToolTipText("Setzt das Programm auf den Werkszustand zurück (Tankdaten sind weiterhin vorhanden");
zuruecksetzten.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
File file = new File("init.txt");
file.delete();
if (Main.dev == true) {
String[] arg = { "-dev" };
Main.main(arg);
} else {
String[] arg = { "null" };
Main.main(arg);
}
frame.setVisible(false);
}
});
help.add(zuruecksetzten);
JMenuItem info = new JMenuItem("Info");
help.add(info);
info.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
JOptionPane.showMessageDialog(null,
"Es ist momentan noch keine Info eingerichtet", "Info",
1);
}
});
menueLeiste.add(file);
menueLeiste.add(help);
frame.setJMenuBar(menueLeiste);
}
/**
* Erstellt einen neuen JFrame mit dem Name "Benzinverbrauchsrechner" und
* weißt Ihm die Größe zu.<br>
* Der Mehtode setDefaultCloseOperation() wird der wert "EXIT_ON_CLOSE"
* zugewießen.
*/
private void setWindow() {
frame = new JFrame("Benzinverbrauchsrechner");
frame.setBounds(
Toolkit.getDefaultToolkit().getScreenSize().width / 2 - 250,
Toolkit.getDefaultToolkit().getScreenSize().height / 2 - 250,
450, 500);
// frame.setBounds(100, 100, 450, 500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
}
/**
* setLook() ändert den Look des JavaProgrammes in eine Standard Windows
* Aplikation<br>
*/
}