package berechnung;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.UIManager;
import visualisierungen.GrundrissPanel;
import visualisierungen.Schnitt;
import javax.swing.JOptionPane; // Hinweisfenster
public class LaMaAnwendungsfenster extends JFrame implements ActionListener {
public static void main(String[] args) throws Exception {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
new LaMaAnwendungsfenster().setVisible(true);
}
// booleans für Ansichten
boolean SchnittGrundriss;
boolean StatSystem;
boolean Querkraft;
boolean Moment;
boolean Uebersicht;
boolean gesamt;
boolean Hilfe;
private void setAnsichtFalse() {
this.SchnittGrundriss = false;
this.StatSystem = false;
this.Querkraft = false;
this.Moment = false;
this.Uebersicht = false;
this.Hilfe = false;
}
// Variablen erzeugen fÜr
// Panel für graphische Darstellung
private JPanel ausgabeGraphischPanel = new JPanel();
// Panel für Eingabe der Daten (links/"west")
private JPanel WestPanel = new JPanel(new BorderLayout());
// Panel für Grunddaten (links oben)
private JPanel WertePanel = new JPanel(new BorderLayout());
private JPanel LaengePanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
private JPanel BreitePanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
private JPanel GeschosshoehePanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
private JPanel GeschossanzahlPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
private JPanel DeckenstaerkePanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
private JPanel WandmaterialPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
private JPanel EingabeWertePanel = new JPanel(new GridLayout(6, 2));
// Textfelder für Grunddaten (links oben)
private LaMaGebaeude LaMa = new LaMaGebaeude();
private JTextField LaengeTxt = new JTextField("20.50");
private JTextField BreiteTxt = new JTextField("20.80");
private JTextField GeschosshoeheTxt = new JTextField("2.60");
private JTextField GeschossanzahlTxt = new JTextField("3");
private JTextField DeckenstaerkeTxt = new JTextField("0.16");
private JTextField WandmaterialTxt = new JTextField("18.0");
// Panel für Geschwindigkeitsdruck (links mitte)
private JPanel WindPanel = new JPanel(new BorderLayout());
private JPanel WindrPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
private JPanel GeschwindigkeitsdruckPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
//private JPanel AnzahlwandxPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
//private JPanel AnzahlwandyPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
private JPanel EingabeWindPanel = new JPanel(new GridLayout(2, 1));
// Textfelder für Geschwindkeitsdruck(links mitte)
private JTextField GeschwindigkeitsdruckTxt = new JTextField("0.65");
private JTextField WindrTxt = new JTextField("0");
// Tabelle für Wandscheiben (links unten)
private JTable WandscheibenTable = new JTable();
private LaMaGebaeude wandscheibe;
private WandscheibeToTableModelAdapter adapter;
private JButton EinfuegeWandB = new JButton("Wand hinzufügen");
private JButton EntfernenWandB = new JButton("Wand entfernen");
private JPanel EingabeWandscheibenTable = new JPanel(new GridLayout(2, 2));
// Start+Hilfe+Beenden Button (unten/"south")
private JButton StartB = new JButton("START");
private JButton HilfeB = new JButton("HILFE");
private JButton BeendenB = new JButton("BEENDEN");
// Panel für Buttonreihe (mitte/"central")
private JPanel ButtonPanel = new JPanel(new GridLayout(1, 5, 50, 0));
private JPanel AuswahlPanel = new JPanel(new BorderLayout());
private JButton SchnittGrundrissB = new JButton("Schnitt/Grundriss");
private JButton StatSystemB = new JButton("Statisches System");
private JButton QuerkraftB = new JButton("Querkraft");
private JButton MomentB = new JButton("Moment");
private JButton UebersichtB = new JButton("Übersicht");
// Panels Mitte
private JPanel CenterPanel = new JPanel(new BorderLayout());
// Panel Buttonleiste
private JPanel SouthPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
// Eingabemaske erzeugen
public LaMaAnwendungsfenster() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
setTitle("Berechnung: Lastverteilung infolge Wind bei Massivbauten (Flachdächer)");
setLayout(new BorderLayout(5, 5));
int maxWidth = (int) Toolkit.getDefaultToolkit().getScreenSize().getWidth();
int width = Math.min(1500, maxWidth);
setSize(width, 875);
setMinimumSize(new Dimension(width, 700));
// Zuhören auf Events(Eingabe) der Buttons eingeschaltet
this.StartB.addActionListener(this);
this.HilfeB.addActionListener(this);
this.BeendenB.addActionListener(this);
this.SchnittGrundrissB.addActionListener(this);
this.StatSystemB.addActionListener(this);
this.QuerkraftB.addActionListener(this);
this.MomentB.addActionListener(this);
this.UebersichtB.addActionListener(this);
// "Haupt-Panels" der Eingabemaske hinzufuegen + Ausrichtung
add(createWestPanel(), BorderLayout.WEST);
add(createSouthPanel(), BorderLayout.SOUTH);
add(createCenterPanel(), BorderLayout.CENTER);
}
// Einzelne Bereiche des West-Panels (linker Bereich der Eingabemaske)
// hinzufügen
private JPanel createWestPanel() {
WestPanel.add(createWertePanel(), BorderLayout.NORTH); // Links oben
WestPanel.add(createWindPanel(), BorderLayout.CENTER); // Links mitte
WestPanel.add(createWandscheibenTable(), BorderLayout.SOUTH); // Links
// unten
return WestPanel;
}
// Einzelne Bereiche des Center-Panels (mittlerer Bereich der Eingabemaske)
// hinzufügen
private JPanel createCenterPanel() {
CenterPanel.add(createAuswahlPanel(), BorderLayout.SOUTH);
CenterPanel.add(createGraphischPanel(), BorderLayout.NORTH);
CenterPanel.setSize(new Dimension(250, 200));
return CenterPanel;
}
// Einzelne Buttons des South-Panels (unterer Bereich der Eingabemaske)
// hinzufügen
private JPanel createSouthPanel() {
SouthPanel.add(this.StartB);
SouthPanel.add(this.HilfeB);
SouthPanel.add(this.BeendenB);
return SouthPanel;
}
// Panels und Textfelder formatieren
// Eingabe Grunddaten (links oben - West-Panel > North)
private JPanel createWertePanel() {
WertePanel.setSize(new Dimension(350, 550));
// Länge
LaengeTxt.setPreferredSize(new Dimension(60, 20)); // Eingabefeld
// erzeugen
LaengePanel.add(this.LaengeTxt); // Eingabefeld hinzufügen
LaengePanel.add(new JLabel("m", JLabel.LEFT)); // Label erzeugen und zu
// Eingabefeld
// hinzufügen
EingabeWertePanel.add(new JLabel("Länge", JLabel.LEFT)); // Label
// erzeugen
// und
// hinzufügen
EingabeWertePanel.add(LaengePanel); // Eingabeld hinzufügen
// Breite
BreiteTxt.setPreferredSize(new Dimension(60, 20));
BreitePanel.add(this.BreiteTxt);
BreitePanel.add(new JLabel("m", JLabel.LEFT));
EingabeWertePanel.add(new JLabel("Breite", JLabel.LEFT));
EingabeWertePanel.add(BreitePanel);
// Geschossanzahl
GeschossanzahlTxt.setPreferredSize(new Dimension(60, 20));
GeschossanzahlPanel.add(this.GeschossanzahlTxt);
GeschossanzahlPanel.add(new JLabel("-", JLabel.LEFT));
EingabeWertePanel.add(new JLabel("Geschossanzahl ", JLabel.LEFT));
EingabeWertePanel.add(GeschossanzahlPanel);
// Geschosshoehe
GeschosshoeheTxt.setPreferredSize(new Dimension(60, 20));
GeschosshoehePanel.add(this.GeschosshoeheTxt);
GeschosshoehePanel.add(new JLabel("m", JLabel.LEFT));
EingabeWertePanel.add(new JLabel("Geschosshöhe", JLabel.LEFT));
EingabeWertePanel.add(GeschosshoehePanel);
// Deckenstaerke
DeckenstaerkeTxt.setPreferredSize(new Dimension(60, 20));
DeckenstaerkePanel.add(this.DeckenstaerkeTxt);
DeckenstaerkePanel.add(new JLabel("m", JLabel.LEFT));
EingabeWertePanel.add(new JLabel("Deckenstärke", JLabel.LEFT));
EingabeWertePanel.add(DeckenstaerkePanel);
// Wandmaterial
WandmaterialTxt.setPreferredSize(new Dimension(60, 20));
WandmaterialPanel.add(this.WandmaterialTxt);
WandmaterialPanel.add(new JLabel("kN/m³", JLabel.LEFT));
EingabeWertePanel.add(new JLabel("Wandmaterial", JLabel.LEFT));
EingabeWertePanel.add(WandmaterialPanel);
// Rahmen um Eingabefelde Grunddaten
WertePanel.setBorder(BorderFactory.createTitledBorder("Eingabe: Grunddaten des Gebäudes"));
WertePanel.add(EingabeWertePanel, BorderLayout.WEST);
return WertePanel;
}
// Eingabe Windlastzone (links mitte - West-Panel > Center)
private JPanel createWindPanel() {
WindPanel.setPreferredSize(new Dimension(350, 300));
// Windrichtung
WindrTxt.setPreferredSize(new Dimension(60, 20));
WindrPanel.add(this.WindrTxt);
WindrPanel.add(new JLabel("x=o; y=1", JLabel.LEFT));
EingabeWindPanel.add(new JLabel("Windrichtung", JLabel.LEFT));
EingabeWindPanel.add(WindrPanel);
// Geschwindigkeitsdruck
GeschwindigkeitsdruckTxt.setPreferredSize(new Dimension(60, 20));
GeschwindigkeitsdruckPanel.add(this.GeschwindigkeitsdruckTxt);
GeschwindigkeitsdruckPanel.add(new JLabel("kN/m²", JLabel.LEFT));
EingabeWindPanel.add(new JLabel("Geschwindigkeitsdruck ", JLabel.LEFT));
EingabeWindPanel.add(GeschwindigkeitsdruckPanel);
// Rahmen um Eingabefelder Wind
WindPanel.setBorder(BorderFactory.createTitledBorder("Eingabe: Windlasten"));
WindPanel.add(EingabeWindPanel, BorderLayout.WEST);
return WindPanel;
}
// Eingabe Wandscheiben (links unten - West-Panel > South)
private JPanel createWandscheibenTable() {
JPanel WanscheibeTab = new JPanel(new BorderLayout());
WanscheibeTab.setPreferredSize(new Dimension(350, 500));
this.wandscheibe = new LaMaGebaeude();
this.wandscheibe.setlae(Double.parseDouble(LaengeTxt.getText()));
this.wandscheibe.setbre(Double.parseDouble(BreiteTxt.getText()));;
wandscheibe.setGeschossAnzahl(Integer.parseInt(GeschossanzahlTxt.getText()));
this.ausgabeGraphischPanel.add(new GrundrissPanel(wandscheibe,wandscheibe.getBreite(),wandscheibe.getLaenge()),BorderLayout.LINE_START);
this.ausgabeGraphischPanel.add(new Schnitt(wandscheibe),BorderLayout.LINE_END);
this.adapter = new WandscheibeToTableModelAdapter(this.wandscheibe);
this.WandscheibenTable = new JTable(this.adapter);
this.EntfernenWandB.addActionListener(this);
this.EinfuegeWandB.addActionListener(this);
WanscheibeTab.add(new JScrollPane(this.WandscheibenTable), BorderLayout.CENTER);
JPanel t1 = new JPanel(new FlowLayout(FlowLayout.LEFT));
t1.add(this.EinfuegeWandB);
t1.add(this.EntfernenWandB);
WanscheibeTab.add(t1, BorderLayout.SOUTH);
// Rahmen um Eingabefelder Wind
WanscheibeTab.setBorder(BorderFactory.createTitledBorder("Eingabe: Wandscheiben"));
WanscheibeTab.add(EingabeWandscheibenTable, BorderLayout.WEST);
return WanscheibeTab;
}
// Graphische Darstellung (mitte oben > Center-Panel > North)
private JPanel createGraphischPanel() {
//ausgabeGraphischPanel.setPreferredSize(new Dimension(10, 780));
this.ausgabeGraphischPanel.setLayout(new BorderLayout());
this.ausgabeGraphischPanel.add(new JLabel("Graphische Darstellung", JLabel.CENTER));
this.ausgabeGraphischPanel.setBorder(BorderFactory.createTitledBorder("Graphisch"));
this.ausgabeGraphischPanel.add(new GrundrissPanel(wandscheibe));
return ausgabeGraphischPanel;
}
// Buttonleiste (mitte unten > Center-Panel > South)
private JPanel createAuswahlPanel() {
// Einzelne Buttons in Center-Panel > South hinzufügen
ButtonPanel.add(this.SchnittGrundrissB);
ButtonPanel.add(this.StatSystemB);
ButtonPanel.add(this.QuerkraftB);
ButtonPanel.add(this.MomentB);
ButtonPanel.add(this.UebersichtB);
// Anordnung
AuswahlPanel.setBorder(BorderFactory.createTitledBorder("Gaphische Ausgabeoptionen"));
AuswahlPanel.add(ButtonPanel, BorderLayout.CENTER);
return AuswahlPanel;
}
// Start Ausgabe
private void setfalsch() {
this.SchnittGrundrissB.setSelected(false);
this.StatSystemB.setSelected(false);
this.QuerkraftB.setSelected(false);
this.MomentB.setSelected(false);
this.UebersichtB.setSelected(false);
}
// Buttons funktionen zuweisen
public void actionPerformed(ActionEvent e) {
if (e.getSource() == this.BeendenB) {
/*
* Aktion beim drueken des Buttons:
*
* BEENDEN
*
*/
JOptionPane.showMessageDialog(null, "BeendenB", "Button", JOptionPane.INFORMATION_MESSAGE); // TODO nur zur Hilfe, später löschen
System.exit(0);
} else if (e.getSource() == this.EinfuegeWandB) {
/*
* Aktion beim drueken des Buttons:
*
* Wand hinzufügen
*
*/
JOptionPane.showMessageDialog(null, "EinfuegeWandB", "Button", JOptionPane.INFORMATION_MESSAGE); // TODO nur zur Hilfe, später löschen
this.adapter.EinfuegeWand(0, 0, 0, 0, 0);
} else if (e.getSource() == this.EntfernenWandB) {
/*
* Aktion beim drueken des Buttons:
*
* Wand entfernen
*
*/
JOptionPane.showMessageDialog(null, "EntfernenWandB", "Button", JOptionPane.INFORMATION_MESSAGE); // TODO nur zur Hilfe, später löschen
this.adapter.EntferneWand(this.WandscheibenTable.getSelectedRow());
/*
* } else if (e.getSource() == this.HilfeB){
* JOptionPane.showMessageDialog(null, "HilfeB", "Button",
* JOptionPane.INFORMATION_MESSAGE); // TODO nur zur Hilfe, später
* löschen this.Hilfe.HilfeFenster(); this.HilfeB.setSelected(true);
* this.setAnsichtFalse(); this.HilfeB = true;
*/
} else if (e.getSource() == this.StartB) {
/*
* Aktion beim drueken des Buttons:
*
* START
*
*/
JOptionPane.showMessageDialog(null, "StartB", "Button", JOptionPane.INFORMATION_MESSAGE); // TODO nur zur Hilfe, später löschen
this.ausgabeGraphischPanel.revalidate();
// this.ausgabeGraphischPanel.add(new GrundrissPanel(wandscheibe,wandscheibe.getBreite(),wandscheibe.getLaenge()),BorderLayout.LINE_START);
//this.ausgabeGraphischPanel.add(new Schnitt(wandscheibe),BorderLayout.LINE_END);
// ausgabeGraphischPanel.repaint();
this.LaMa.setlae(Double.parseDouble(this.LaengeTxt.getText()));
this.LaMa.setbre(Double.parseDouble(this.BreiteTxt.getText()));
this.LaMa.setgesh(Double.parseDouble(this.GeschosshoeheTxt.getText()));
this.LaMa.setgesa(Integer.parseInt(this.GeschossanzahlTxt.getText()));
this.LaMa.setdest(Double.parseDouble(this.DeckenstaerkeTxt.getText()));
this.LaMa.setwandm(Double.parseDouble(this.WandmaterialTxt.getText()));
this.LaMa.setgeschwindd(Double.parseDouble(this.GeschwindigkeitsdruckTxt.getText()));
this.LaMa.setwindr(Double.parseDouble(this.WindrTxt.getText()));
System.out.println("-=== Wandscheiben (LaMaAnwendungsfenster) ===-\n" + "Anzahl Waende: "
+ this.adapter.getRowCount() + "\nAnzahl Waende: " + wandscheibe.countWandkoordinaten()
+ "\nWert 1 der 1. Wand: " + this.adapter.getValueAt(0, 0) + "\nArray mit allen Waenden: "
+ WandscheibenTable.getComponents() + "\n-===-");
// System.out.println(Arrays.asList(WandscheibenTable.getComponents()));
// Arrays für tabellarische Eingabe Wandscheiben
double[] xkoA = new double[this.adapter.getRowCount()];
double[] ykoA = new double[this.adapter.getRowCount()];
double[] wanddA = new double[this.adapter.getRowCount()];
double[] richA = new double[this.adapter.getRowCount()];
double[] laewA = new double[this.adapter.getRowCount()];
// Spalten fest/ Zeilen variabel
for (int i = 0; i < this.adapter.getRowCount(); i++) {
xkoA[i] = Double.parseDouble(this.adapter.getValueAt(i, 0).toString());
ykoA[i] = Double.parseDouble(this.adapter.getValueAt(i, 1).toString());
wanddA[i] = Double.parseDouble(this.adapter.getValueAt(i, 2).toString());
laewA[i] = Double.parseDouble(this.adapter.getValueAt(i, 3).toString());
richA[i] = Double.parseDouble(this.adapter.getValueAt(i, 4).toString());
}
this.LaMa.setWaende(this.adapter.getRowCount(), xkoA, ykoA, wanddA, laewA, richA);
// TODO kann weg!
System.out.println("-=== xkoA ===-");
System.out.println(Arrays.toString(xkoA));
System.out.println("-=== ykoA ===-");
System.out.println(Arrays.toString(ykoA));
System.out.println("-=== wanddA ===-");
System.out.println(Arrays.toString(wanddA));
System.out.println("-=== laewA ===-");
System.out.println(Arrays.toString(laewA));
System.out.println("-=== richA ===-");
System.out.println(Arrays.toString(richA));
this.LaMa.berechne();
this.ausgabeGraphischPanel.removeAll();
if (SchnittGrundriss) {
this.SchnittGrundrissB.setSelected(true);
this.ausgabeGraphischPanel.add(new GrundrissPanel(this.LaMa));
} else if (Uebersicht) {
this.UebersichtB.setSelected(true);
this.ausgabeGraphischPanel.add(new Schnitt(this.LaMa));
} else if (StatSystem) {
this.StatSystemB.setSelected(true);
this.ausgabeGraphischPanel.add(new LaMaDarstellungStatSystem(this.LaMa));
} else if(Querkraft) {
this.QuerkraftB.setSelected(true);
this.ausgabeGraphischPanel.add(new LaMaDarstellungQuerkraft(this.LaMa));
} else if (Moment) {
this.MomentB.setSelected(true);
this.ausgabeGraphischPanel.add(new LaMaDarstellungMoment(this.LaMa));
} else if (Hilfe) {
this.HilfeB.setSelected(true);
this.ausgabeGraphischPanel.add(new HilfeFenster());
// } else {
// this.ausgabeGraphischPanel.removeAll();
//this.setfalsch();
}
}
else {
actionPerformed(new ActionEvent(this.StartB,
ActionEvent.ACTION_FIRST, ""));
this.ausgabeGraphischPanel.removeAll();
this.setfalsch();
if (e.getSource() == this.SchnittGrundrissB || e.getSource() == this.SchnittGrundrissB) {
/*
* Aktion beim drueken des Buttons:
*
* Schnitt/Grundriss
*
*/
JOptionPane.showMessageDialog(null, "SchnittGrundrissB", "Button", JOptionPane.INFORMATION_MESSAGE); // TODO nur zur Hilfe, später löschen
this.SchnittGrundrissB.setSelected(true);
this.ausgabeGraphischPanel.add(new GrundrissPanel(this.LaMa));
this.setAnsichtFalse();
this.SchnittGrundriss = true;
} else if (e.getSource() == this.StatSystemB) {
/*
* Aktion beim drueken des Buttons:
*
* Statisches System
*
*/
JOptionPane.showMessageDialog(null, "StatSystemB", "Button", JOptionPane.INFORMATION_MESSAGE); // TODO nur zur Hilfe, später löschen
this.StatSystemB.setSelected(true);
this.ausgabeGraphischPanel.add(new LaMaDarstellungStatSystem(this.LaMa));
this.setAnsichtFalse();
this.StatSystem = true;
} else if (e.getSource() == this.QuerkraftB) {
/*
* Aktion beim drueken des Buttons:
*
* Querkraft
*
*/
JOptionPane.showMessageDialog(null, "QuerkraftB", "Button", JOptionPane.INFORMATION_MESSAGE); // TODO nur zur Hilfe, später löschen
this.QuerkraftB.setSelected(true);
this.ausgabeGraphischPanel.add(new LaMaDarstellungQuerkraft(this.LaMa));
this.setAnsichtFalse();
this.Querkraft = true;
} else if (e.getSource() == this.MomentB) {
/*
* Aktion beim drueken des Buttons:
*
* Moment
*
*/
JOptionPane.showMessageDialog(null, "MomentB", "Button", JOptionPane.INFORMATION_MESSAGE); // TODO nur zur Hilfe, später löschen
this.MomentB.setSelected(true);
this.ausgabeGraphischPanel.add(new LaMaDarstellungMoment(this.LaMa));
this.setAnsichtFalse();
this.Moment = true;
} else if (e.getSource() == this.UebersichtB) {
/*
* Aktion beim drueken des Buttons:
*
* Übersicht
*
*/
JOptionPane.showMessageDialog(null, "UebersichtB", "Button", JOptionPane.INFORMATION_MESSAGE); // TODO nur zur Hilfe, später löschen
this.UebersichtB.setSelected(true);
//this.ausgabeGraphischPanel.add(new LaMaDarstellungUebersicht(this.LaMa));
this.setAnsichtFalse();
this.Uebersicht = true;
} else if (e.getSource() == this.HilfeB) {
/*
* Aktion beim drueken des Buttons:
*
* HILFE
*
*/
JOptionPane.showMessageDialog(null, "HilfeB", "Button", JOptionPane.INFORMATION_MESSAGE); // TODO nur zur Hilfe, später löschen
this.HilfeB.setSelected(true);
HilfeFenster hilfefenster=new HilfeFenster();
hilfefenster.show();
this.setAnsichtFalse();
this.Hilfe = true;
this.ausgabeGraphischPanel.validate();
}
this.ausgabeGraphischPanel.validate();
}
}
}