import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.LineBorder;
/**
* Klasse zur Erstellung der Eingabemaske für das Treppenstufenverfahren
* @author Christian
*/
public class TreppenstufenGUI implements FocusListener {
public static void main( String[] args){
TreppenstufenGUI tsg =new TreppenstufenGUI();
tsg.start();
}
JFrame frame = new JFrame( "Treppenstufenverfahren - Eingabemaske"); //Fenster erzeugen
JPanel panel =new JPanel();
JPanel kopfPanel = new JPanel(); //Platte für den Inhalt des Fensters
JPanel bodyPanel =new JPanel();
JPanel auswertPanel =new JPanel();
JPanel buttonPanel =new JPanel();
static byte horizonte =10;
static byte probenzahl =15;
static double schrittweite =4;
static double kleinstesLast =100;
static byte typFuerAuswertung;
static final byte textfieldLength =8;
static JTextField durchT =new JTextField( textfieldLength);
static JTextField bruchT =new JTextField( textfieldLength);
static JTextField probenanzahlT =new JTextField( textfieldLength);
static JTextField schrittweiteT =new JTextField( textfieldLength);
static JTextField schrittanzahlT =new JTextField( textfieldLength);
static JTextField kleinstesLastT =new JTextField( textfieldLength);
static JLabel[][] ergLab;
JTextField[][] text;
JLabel[] last;
static JLabel durchlaeufer =new JLabel( "");
static JLabel brueche =new JLabel( "");
static JLabel auswerteTyp =new JLabel( " - ");
static JLabel auswerteKontrolle =new JLabel( " - ");
static JLabel auswerteColorTextLabel;
static JLabel auswerteStabw =new JLabel( " - ");
static JLabel auswerteSigma= new JLabel( " - ");
static JLabel sigmaLabel = new JLabel( "Sigma: ");
/**
* Method für die Erzeugung der Oberfläche
*/
public void start(){
// Muss hier erzeugt werden, da es noch initialisiert werden muss
ergLab =new JLabel[ horizonte +2][ 4];
kopf();
body();
auswertung();
button();
Box b =Box.createVerticalBox();
b.add( kopfPanel);
b.add( bodyPanel);
b.add( auswertPanel);
b.add( buttonPanel);
panel.add( b);
JScrollPane jsp =new JScrollPane( JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
jsp.setViewportView( panel); //Panel an ScrollPane übergeben
frame.getContentPane().add( jsp); //ScrollPane, dass das Panel hält an Frame übergeben
jsp.setVisible(true); //ScrollPane sichtbar machen
frame.add( jsp);
frame.setSize( 1000, 650); //Fenstergröße bestimmen
frame.setResizable( true); //Feste größe des Fensters festlengen
frame.setVisible( true); //Fenster sichtbar machen
frame.setLocationRelativeTo( null); //Auf Bildschirm zentrieren
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE);
frame.pack();
}
/**
* Erstellen des Maskenteils mit den Kopfdaten
*/
protected void kopf(){
JLabel durchL =new JLabel( "Durchläufer:"); //Namensschild
JLabel bruchL =new JLabel( "Brüche:"); //Namensschild
JLabel probenanzahlL =new JLabel( "Probenanzahl"); //Namensschild
JLabel schrittweiteL =new JLabel( "Schrittweite d [MPa]"); //Namensschild
JLabel schrittanzahlL =new JLabel( "Anzahl Niveaus"); //Namensschild
JLabel kleinstesLastL =new JLabel( "kleinstes Lastniveau [MPa]"); //Namensschild
kopfPanel.setLayout( new GridBagLayout());//Panel ein Layout zuweisen
GridBagConstraints gbc =new GridBagConstraints(); //Neues GridBagConstraints-Object das verschiede eigenschaften hat
gbc.insets =new Insets(2, 5, 2, 5); //Ränder um die einzelnen Komponenten
gbc.anchor =GridBagConstraints.WEST; //Ausrichtung
//Zeile 1
//Durchläufer
gbc.gridx =0;
gbc.gridy =0; //Zähler für die Spalten und Zeielen des Rasters
kopfPanel.add( durchL, gbc); //Object auf das Panel hinzufügen
gbc.gridx++;
kopfPanel.add( durchT, gbc);
//Probenanzahl
gbc.gridx++;
kopfPanel.add( probenanzahlL, gbc);
gbc.gridx++;
kopfPanel.add( probenanzahlT, gbc);
//Zeile 2
//Brüche
gbc.gridx =0;
gbc.gridy++;
kopfPanel.add( bruchL, gbc);
gbc.gridx++;
kopfPanel.add( bruchT, gbc);
//kleinstes Lastniveau
gbc.gridx++;
kopfPanel.add( kleinstesLastL, gbc);
gbc.gridx++;
kopfPanel.add( kleinstesLastT, gbc);
//Zeile 3
// Schrittweite
gbc.gridx =2;
gbc.gridy++;
kopfPanel.add( schrittweiteL, gbc);
gbc.gridx++;
kopfPanel.add( schrittweiteT, gbc);
//Zeile 4
gbc.gridx =2;
gbc.gridy++;
kopfPanel.add( schrittanzahlL, gbc);
gbc.gridx++;
kopfPanel.add( schrittanzahlT, gbc);
//Zeile 5
//Abstandsebene
gbc.gridx++;
gbc.gridy++;
JLabel spacer =new JLabel( " ");
kopfPanel.add( spacer, gbc);
}
/**
* Erstellen des Maskenteils mit den Eingabewerten und Teilweisen Auswertung
*/
protected void body(){
last =new JLabel[ horizonte +1];
last =initLabel( last, kleinstesLast, schrittweite, horizonte);
text =new JTextField[ horizonte][ probenzahl];
text =initTextfield( text);
ergLab =initLabel(ergLab, horizonte);
bodyPanel.setLayout( new GridBagLayout());//Panel ein Layout zuweisen
GridBagConstraints gbc =new GridBagConstraints(); //Neues GridBagConstraints-Object das verschiede eigenschaften hat
gbc.insets =new Insets(2, 5, 2, 5); //Ränder um die einzelnen Komponenten
gbc.anchor =GridBagConstraints.WEST; //Ausrichtung
gbc.gridx =0;
gbc.gridy =0;
//Lasthorizonte
for( int i =0; i <last.length; i++){
bodyPanel.add( last[ i], gbc);
gbc.gridy++;
}
//Eingabefelder
gbc.gridy =1;
for( int row =0; row <text.length; row++){
gbc.gridx =1;
for( int col =0; col <text[ row].length; col++){
bodyPanel.add( text[ row][ col], gbc);
gbc.gridx++;
}
gbc.gridy++;
}
//AuswerteTeil
gbc.gridx++;
gbc.gridy =0;
int ergStart =gbc.gridx++;
for( int row =0; row <ergLab.length; row++){
gbc.gridx =ergStart;
for( int col =0; col <ergLab[ row].length; col++){
bodyPanel.add( ergLab[ row][ col], gbc);
gbc.gridx++;
}
gbc.gridy++;
}
}
/**
* Erstellen des Maskenteils mit für die Auswertung
*/
protected void auswertung(){
JLabel auswertLabel =new JLabel( "Auswertung für : ");
JLabel sumDurchlaeufer =new JLabel( "\u03A3 Durchläufer: ");
JLabel sumBrueche =new JLabel( "\u03A3 Brüche: ");
// JLabel kontrollLabel =new JLabel( "Kontrolle (F*B -A²)/F² >0,3 : ");
JLabel kontrollLabel =new JLabel( new ImageIcon( "formel\\treppeKontrolle_.png"));
auswerteColorTextLabel =new JLabel();
// JLabel stabwLabel =new JLabel( "s =1,62*d ((F*B -A²)/F² +0,029): ");
JLabel stabwLabel =new JLabel( new ImageIcon( "formel\\treppeStabw_.png"));
auswertPanel.setLayout( new GridBagLayout());//Panel ein Layout zuweisen
GridBagConstraints gbc =new GridBagConstraints(); //Neues GridBagConstraints-Object das verschiede eigenschaften hat
gbc.insets =new Insets(2, 5, 2, 5); //Ränder um die einzelnen Komponenten
gbc.anchor =GridBagConstraints.WEST; //Ausrichtung
gbc.gridy =0;
gbc.gridx =0;
auswertPanel.add( auswertLabel, gbc);
gbc.gridx++;
auswertPanel.add( auswerteTyp, gbc);
gbc.gridx++;
auswertPanel.add( new JLabel( " "), gbc);
gbc.gridx++;
auswertPanel.add( sumDurchlaeufer, gbc);
gbc.gridx++;
auswertPanel.add( durchlaeufer, gbc);
auswertPanel.add( new JLabel( " "), gbc);
gbc.gridx++;
auswertPanel.add( sumBrueche, gbc);
gbc.gridx++;
auswertPanel.add( brueche, gbc);
gbc.gridy++;
gbc.gridx =0;
auswertPanel.add( kontrollLabel, gbc);
gbc.gridx++;
auswertPanel.add( auswerteKontrolle, gbc);
gbc.gridx++;
auswertPanel.add( auswerteColorTextLabel, gbc);
gbc.gridy++;
gbc.gridx =0;
auswertPanel.add( stabwLabel, gbc);
gbc.gridx++;
auswertPanel.add( auswerteStabw, gbc);
gbc.gridy++;
gbc.gridx =0;
auswertPanel.add( sigmaLabel, gbc);
gbc.gridx++;
auswertPanel.add( auswerteSigma, gbc);
}
/**
* Erstellen des ButtonPanel mit einem Button und angehängtem Actionlistener
*
*/
protected void button(){
JButton calc =new JButton( "Auswerten");
calc.addActionListener( new ActionListener(){ //ActionListener hinzufügen, ist der Button gedrück oder nicht?
@Override
public void actionPerformed( ActionEvent e){//was tun wenn der Button gedrückt wurde
}
});
buttonPanel.add( calc);
}
/**
* Initialisierung des JLabel[]( Vektors) für die Lastamplituden
*
* @param last Refenez auf das Object, welches initialisiert werden soll
* @param kleinstesLastniveau Wert für das kleinste Lastniveau aus der Eingabemaske
* @param schrittweite Wert für die Schrittweite aus der Eingabemaske
* @param niveauanzahl Wert mit der Anzahl für die Lastniveaus
* @return Referenz auf das initialisiertes Object
*/
protected JLabel[] initLabel( JLabel[] last, double kleinstesLastniveau, double schrittweite, byte niveauanzahl){
last[ 0] =new JLabel( " Last");
for( int i =last.length-1; i >0; i--){
double nameval =kleinstesLastniveau +schrittweite *(niveauanzahl-i);
String name =String.format(" %.2f", nameval);
last[ i] =new JLabel( name);
}
return last;
}
/**
* Initalisierung der JTextField[][]( Matrix) für den Eingabebereichs
*
* @param text Refenez auf das Object, welches initialisiert werden soll
* @return Referenz auf das initialisiertes Object
*/
protected JTextField[][] initTextfield( JTextField[][] text){
byte textlength =2;
for( int row =0; row <text.length; row++){ //Zeilen
for( int col =0; col <text[ row].length; col++){ //Spalten pro Zeile
text[ row][ col] =new JTextField( textlength);
text[ row][ col].addFocusListener( this);
}
}
return text;
}
/**
* Initalisierung des JLabel[][]( Matrix) für den Ergebnisteils
*
* @param erg Refenez auf das Object, welches initialisiert werden soll
* @param horizonte Parameter für die Anzahl der Zeilen
* @return Referenz auf das initialisiertes Object
*/
protected JLabel[][] initLabel( JLabel[][] erg, byte horizonte){
erg[ 0][ 0] = new JLabel( String.format( "%9s", "i Stufen"));
erg[ 0][ 1] = new JLabel( String.format( "%9s", "f(i)"));
erg[ 0][ 2] = new JLabel( String.format( "%9s", "i *f"));
erg[ 0][ 3] = new JLabel( String.format( "%9s", "i^2 *f"));
for( int row =1; row <horizonte+1; row++){
for( int col =0; col <erg[ row-1].length; col++){
erg[ row][ col] = new JLabel( "");
}
}
for( int row =1; row <horizonte+1; row++){
erg[ row][ 0].setText( ""+( horizonte -row));
}
erg[ horizonte +1][ 0] = new JLabel( String.format( "%-9s", "\u03A3"));
erg[ horizonte +1][ 1] = new JLabel( String.format( "%9s", "F: "));
erg[ horizonte +1][ 2] = new JLabel( String.format( "%9s", "A: "));
erg[ horizonte +1][ 3] = new JLabel( String.format( "%9s", "B:"));
return erg;
}
/**
* Mehtode die Prüft, ob pro Spalte nur ein Werte eingegeben wurden
*
* @return boolean, der angibt, ob die Auswertung druchgeführt werden kann oder nicht
*/
protected boolean validate(){
boolean ok =true;
return ok;
}
@Override
public void focusGained( FocusEvent e){
// Auslesen welches objekt der auslößer war
Object obj =e.getSource();
if( e.getSource() instanceof JTextField){
// Den kompletten inhalt des Textfeldes markieren
(( JTextField) obj).selectAll();
} else{}
}
@Override
public void focusLost( FocusEvent e){
String d =durchT.getText();
String b =bruchT.getText();
int rowV=0, colV=0;
// Auslesen welches objekt der auslößer war
Object obj =e.getSource();
if( e.getSource() instanceof JTextField){
String inhalt =(( JTextField) obj).getText();
int hash =obj.hashCode();
if( inhalt.equals( d) || inhalt.equals( b)){
//Zeilen und Spaltenwert des Auslösers finden
for( int rows =0; rows < text.length; rows++){
for( int cols =0; cols <text[ rows].length; cols++){
if( text[ rows][ cols].hashCode() ==hash){
rowV =rows;
colV =cols;
System.out.println( "Zeile: "+ rowV + " Spalte: " +colV);
break;
} else{}
}
}
if( rowV >0 &&rowV <horizonte -1 &&colV <probenzahl-1){
if( inhalt.equals( d) &&rowV -1 >=0){
text[ rowV -1][ colV].transferFocus();
} else if( inhalt.equals( b) &&rowV +1 <horizonte){
text[ rowV +1][ colV].transferFocus();
} else{}
} else if( rowV ==0 &&colV <probenzahl-1){
if( inhalt.equals( d)){
System.out.println( "Falsche Eingabe, da oberstes Lastniveau erreicht ist");
text[ rowV ][ colV +1].transferFocusBackward();
} else if( inhalt.equals( b)){
text[ rowV +1][ colV].transferFocus();
} else{}
} else if( rowV ==horizonte -1 &&colV <probenzahl-1){
if( inhalt.equals( b)){
System.out.println( "Falsche Eingabe, da unterstes Lastniveau erreicht ist");
text[ rowV][ colV +1].transferFocusBackward();
} else if( inhalt.equals( d)){
text[ rowV -1][ colV].transferFocus();
} else{}
} else{}
} else{}
}
}
}