tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
13
ZUGRIFFE
288
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    korona korona ist offline Mitglied
    Registriert seit
    Aug 2011
    Beiträge
    21
    Hallo,

    ich habe zwei Probleme mit der Anwendung.

    1. Wenn ich z.B. für die Bildgröße 7.874 und für den Abbildungsmaßstab 0.3028 eingebe erhalte ich für die Gegenstandsweite kein Ergebnis. Es wird nur 0.0 angezeigt.

    2. Bei der Berechnung des Abbildungsmaßstabes ändert sich der Wert der Gegenstandsgröße und der Wert wird nicht berechnet.

    Kurz gesagt es wird nichts berechnet und die eingegebenen Werte ändern sich.
    Woran kann das liegen?

    Danke und Gruß

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    
    import java.awt.*;
    import javax.swing.*;
    import javax.swing.JFrame;
    import java.awt.event.*;
     
    public class Abbildungsmaßstab implements ActionListener{
        
        JFrame fr;
        JTextField text1, text2, text3;
        JButton ok, lo;
        String b, g, ß;
        double gg, bb, ßß, wert;
        
        public void setLayout(){
            
            fr = new JFrame();
            fr.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
            fr.setResizable(false);
            fr.setLocation(500, 300);
     
            fr.setLayout( new GridLayout(4, 2, 20, 5) );
            
            JLabel lable1 = new JLabel("Bildgröße:");
            fr.add(lable1);     
            text1 = new JTextField();
            text1.setName("b");
            text1.addActionListener(this);
            fr.add(text1);
            
            JLabel lable2 = new JLabel("Gegensgröße:");
            fr.add(lable2);
            text2 = new JTextField(); 
            text2.setName("g");
            text2.addActionListener(this);
            fr.add(text2);
            
            JLabel lable3 = new JLabel("Abbildungsmaßstab");
            fr.add(lable3);
            text3 = new JTextField();
            text3.setName("f");
            text3.addActionListener(this);
            fr.add(text3);
            
            ok = new JButton ("Berechnen");
            ok.setName("ok");
            ok.addActionListener(this);
            fr.add(ok);
            lo = new JButton ("Löschen");
            lo.setName("lo");
            lo.addActionListener(this);       
            fr.add(lo);
         
            fr.pack();
            fr.setVisible( true ); 
        }
         
        public void actionPerformed(ActionEvent event){
                    
            if ("Berechnen".equals(event.getActionCommand())){
                
                if (text1.getText().isEmpty() == true && text2.getText().isEmpty() == true && text3.getText().isEmpty() == true){
                    JDialog dia = new JDialog(fr, "Falsche Eingabe");
                    dia.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);
                    dia.setResizable(false);
                    dia.setLocation(500, 300);
                    dia.setSize(300, 100);
                    dia.setVisible(true);
                } 
                if (text1.getText().isEmpty() == false && text2.getText().isEmpty() == false && text3.getText().isEmpty() == false){
                    text1.setText("");
                    text2.setText("");
                    text3.setText("");
                }
    // --------- Abbildungsmaßstab  -----------                   
                if (text1.getText().isEmpty() == false && text2.getText().isEmpty() == false){
                    b = text1.getText();
                    bb = Double.parseDouble(b);
                    g = text2.getText();
                    gg = Double.parseDouble(g);                    
                    wert = Optikformeln.calcAbbildungsmaßstab(bb, gg);  
                    wert = Math.rint((wert * 100)/100);
                    text3.setText(String.valueOf(wert));   
                }
    // --------- Bildgroeße   -----------
                if (text2.getText().isEmpty() == false && text3.getText().isEmpty() == false){
                    g = text2.getText();
                    gg = Double.parseDouble(g);
                    ß = text3.getText();
                    ßß = Double.parseDouble(ß);                    
                    wert = Optikformeln.calcBildgroeße(ßß, gg); 
                    wert = Math.rint((wert * 100)/100);
                    text1.setText(String.valueOf(wert));                    
                }
    // -------   Gegenstandsgroeße  ----------------
                if (text1.getText().isEmpty() == false && text3.getText().isEmpty() == false){
                    b = text1.getText();
                    bb = Double.parseDouble(b);
                    ß = text3.getText();
                    ßß = Double.parseDouble(ß);                    
                    wert =  Optikformeln.calcGegenstandsgroeße(bb, ßß);
                    wert = Math.rint((wert * 100)/100);
                    text2.setText(String.valueOf(wert));                    
                }
                
            }
            if("Löschen".equals(event.getActionCommand())){
                text1.setText("");
                text2.setText("");
                text3.setText("");
            }
        }   
        public static void main(String[] args) {
            Abbildungsmaßstab ab = new Abbildungsmaßstab();       
            ab.setLayout();      
        }   
    }

    Klasse mit Formeln (die Formeln der Abbildungsgleichung sollen mit dieser Anwendung nichts zu tun haben)

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    
    public class Optikformeln {
    // Abbildungsgleichung
    // Bildweite
        static double calcBildweite(double g, double f){        
            double bildw = (g * f)/(g - f);       
            return bildw;
        }
    // Gegenstandsweite
        static double calcGegenstand(double f, double b){        
            double gegen = (f * b)/(b - f);       
            return gegen;
        }
    // Brennweite
        static double calcBrenweite(double g, double b){        
            double brenn = (g * b)/(g + b);       
            return brenn;
        }
        
    // Die Elemente des Abbildungsmaßstabes
    // Abbildungsmaßstab
        static double calcAbbildungsmaßstab(double b, double g){        
            double abb = b/g;       
            return abb;
        }
    // Bildgroeße
        static double calcBildgroeße(double beta, double g){        
            double bild = beta*g;       
            return bild;
        }
    // Gegenstandsgröße
        static double calcGegenstandsgroeße(double b, double beta){        
            double g = b/beta;       
            return g;
        }
        
    }
    Geändert von korona (04.10.11 um 14:14 Uhr)
     

  2. #2
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Moin,

    habe den Code jetzt nur überflogen und nicht im Detail analysiert, aber wo werden denn die Inhalte für text1 - text3 eingelesen und gesetzt

    Gruß
    Klaus
     
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  3. #3
    korona korona ist offline Mitglied
    Registriert seit
    Aug 2011
    Beiträge
    21
    Hi,

    hier sind die Zeilen. Die ersten beiden bekommen den Wert durch
    Code :
    1
    
    get.Text()
    die dritte soll den berechneten Wert in das Textfeld setzen.

    für Abbildungsmaßstab
    text1 Zeile = 76
    text2 Zeile = 78
    text3 Zeile = 82

    für Bildgröße
    text2 Zeile = 86
    text3 Zeile = 88
    text1 Zeile = 92

    für Gegenstandsgröße
    text1 Zeile = 95
    text3 Zeile = 97
    text2 Zeile = 101
     

  4. #4
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Moin,

    oh, nein - da liegst Du falsch !

    Mit
    Code java:
    1
    
    b = text1.getText();
    wird nur ein Inhalt des Textfeldes text1 ausgelesen.

    Es muss aber auch zuvor gefüllt werden!
    Bspw.:
    Code java:
    1
    
    text1.setText( "Mein Text");

    Und ich sehe - wie gesagt - in Deinem Code keine Stellen, an denen diese 3 Felder mit Werten gefüllt werden !

    siehe auch hier:
    http://download.oracle.com/javase/6/docs/api/

    Gruß
    Klaus
     
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  5. #5
    korona korona ist offline Mitglied
    Registriert seit
    Aug 2011
    Beiträge
    21
    Das Textfeld wird doch durch die Benutzereingabe gefüllt.

    Ich überprüfe doch sogar in Zeile 61 mit einer if Anweisungen ob die Felder ausgefüllt sind.
    PHP-Code:
    if (text1.getText().isEmpty() == true && text2.getText().isEmpty() == true && text3.getText().isEmpty() == true
    In einem nächsem Schrit mit einer weitern if Anweisung z.B. Zeile 75 welche Formel benutzt werden muss.
    PHP-Code:
    if (text1.getText().isEmpty() == false && text2.getText().isEmpty() == false
     

  6. #6
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Moin,

    ah, stimmt - das stehen ja am Ende noch die "setText" ....

    Allerdings wird immer nur in ersten IF text3 gefüllt !
    Und dies dann so ist, sind die die beiden folgenden Anweisungen immer false !

    In welchen Fällen soll denn was gefüllt werden?

    Setz' ggf. hinter die Zeilen mit "setText" jeweils in println ...

    EDIT:
    Was mich auch noch irritiert: da ja initial alle drei Textfelder leer sind, müsstet Du doch den Dialog "Falsche Eingabe" IMMER bekommen, oder ****

    Gruß
    Klaus
    Geändert von vfl_freak (04.10.11 um 13:52 Uhr) Grund: EDIT
     
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  7. #7
    Avatar von Fabio Hellmann
    Fabio Hellmann Fabio Hellmann ist gerade online Mitglied Brokat
    Registriert seit
    Aug 2011
    Ort
    München
    Beiträge
    494
    Hi,

    mach doch immer nach deinem Calc-Aufruf mal eine Ausgabe, um das Zwischenergebnis zu überprüfen.
    Code java:
    1
    2
    
    wert = Optikformeln.calc...(<parameter>, <parameter>);
    System.out.println("Wert = " + wert);

    Gruß

    Fabio
     
    Bitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]

    Tutorials:
    Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
    JAnimationPanel - Animationen für Swing/AWT
    SWTRatingBar (Bewertungs-Composite) selbst programmieren
    ____________________________________________________________________________
    Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.

  8. #8
    korona korona ist offline Mitglied
    Registriert seit
    Aug 2011
    Beiträge
    21
    Hi,
    ich antworte mal rückwärts.

    @Fabio
    Werde ich mal ausprobieren wobei ich der festen Überzeugung bin das es auf Konsole funktoniert. Vorher hatte ich anstelle von Double Integer (Natürlich keine Eingabe von Kommawertern!) da habe ich eine ArithmeticException bekommen weil ich angeblich durch Null teilen würde. Allerdings war das bei den Abbildungsgleichungen bei den ich übrigens das gleiche Problem habe.

    @Klaus
    müsstet Du doch den Dialog "Falsche Eingabe" IMMER bekommen, oder ****
    Nein, der Benutzer füllt zwei Felder aus damit ist eine der drei if-Anweisungen (Abbildungsmaßstab, Bildgröße, Gegenstandsgröße) erfüllt.

    Allerdings wird immer nur in ersten IF text3 gefüllt
    Es kommt drauf an welche Felder vom Nutzer augefüllt werden. Wenn die z.B. die Bildgröße bestimmt werden soll füllt der Nutzer die Felde Gegenstandsgröße (text2) und Abbildungsmaßstab (text3) aus und das entsprechend freie Feld wird berechnet und ausgefüllt.

    Und dies dann so ist, sind die die beiden folgenden Anweisungen immer false
    Nach dem berechnen ist das Programm "Beendet" bzw. der Nutzer drückt auf Löschen und rechnet neu.

    Gruß
    Geändert von korona (04.10.11 um 14:57 Uhr)
     

  9. #9
    Avatar von Fabio Hellmann
    Fabio Hellmann Fabio Hellmann ist gerade online Mitglied Brokat
    Registriert seit
    Aug 2011
    Ort
    München
    Beiträge
    494
    Also mit Integer-Werten kann es deshalb nicht funktionieren, weil das nur Ganze-Zahlen sind, sprich 1, 2, 3, 4, etc.. Dadurch wird z.B. dein Wert von 0.3617 auf 0 abgerundet. Deshalb sagt das Programm dir dann auch, dass du durch 0 teilen willst, was - wie wir ja alle wissen - nicht geht.
    Aber so ohne Zwischenausgabe den Fehler zu finden ist schwer. Ich sehe zumindest keinen.

    Und verwende statt Math.rint(...):
    Code java:
    1
    
    double wert = (double) (Math.round(wert*100)/100.0);
    Geändert von Fabio Hellmann (04.10.11 um 14:54 Uhr)
     
    Bitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]

    Tutorials:
    Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
    JAnimationPanel - Animationen für Swing/AWT
    SWTRatingBar (Bewertungs-Composite) selbst programmieren
    ____________________________________________________________________________
    Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.

  10. #10
    korona korona ist offline Mitglied
    Registriert seit
    Aug 2011
    Beiträge
    21
    So, ich habe das mit System.out.println ausprobiert und es funktioniert.
    Es geht wirklich um die Anzeige in den JTextFiel.

    Bsp 1
    text1 = 1 geteilt durch text2 = 100 wird im Fenster angezeigt Bildgröße 0.0 (vorher 1) und Gegenstandsgröße NaN (vorher 100) das Ergebnis JTextField Abbildungsmaßstab 0.0.
    Mit System.out.println funktionierts.

    Bsp 2
    text2 = 500 mal text3 = 50 wird nichts berechnet. Mit System.out.println funktionierts.

    Dazu erhalte ich noch diese Fehlermeldung (sind nur die ersten drei Zeilen)
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:989)
    at java.lang.Double.parseDouble(Double.java:510)
    Geändert von korona (04.10.11 um 20:52 Uhr)
     

  11. #11
    Avatar von Fabio Hellmann
    Fabio Hellmann Fabio Hellmann ist gerade online Mitglied Brokat
    Registriert seit
    Aug 2011
    Ort
    München
    Beiträge
    494
    Also diese Exception wird ja nur dann geschmissen, wenn eines der Textfelder nicht ausgefüllt ist.
    Du solltest bei deiner If-Bedingung vielleicht nicht abfragen .isEmpty(), sondern:
    Code java:
    1
    
    text1 != null && text1.length() > 0
    Und das für die anderen eben auch.
     
    Bitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]

    Tutorials:
    Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
    JAnimationPanel - Animationen für Swing/AWT
    SWTRatingBar (Bewertungs-Composite) selbst programmieren
    ____________________________________________________________________________
    Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.

  12. #12
    korona korona ist offline Mitglied
    Registriert seit
    Aug 2011
    Beiträge
    21
    Hi,
    funktioniert nicht es wird mit ein Fehler angezeigt.
    Code :
    1
    
    .length()
    wird garnicht als Opton für die Textfelder akzeptiert.
    Gruß
     

  13. #13
    Avatar von Fabio Hellmann
    Fabio Hellmann Fabio Hellmann ist gerade online Mitglied Brokat
    Registriert seit
    Aug 2011
    Ort
    München
    Beiträge
    494
    Oh sorry, ich hab es ein wenig falsch bzw. zu kurz geschrieben.
    Code java:
    1
    2
    3
    4
    
    String text = textField.getText();
    if(text != null && text.length() > 0) {
     
    }

    So müsste es richtig sein
     
    Bitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]

    Tutorials:
    Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
    JAnimationPanel - Animationen für Swing/AWT
    SWTRatingBar (Bewertungs-Composite) selbst programmieren
    ____________________________________________________________________________
    Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.

  14. #14
    korona korona ist offline Mitglied
    Registriert seit
    Aug 2011
    Beiträge
    21
    Hab es ausprobiert. Ich bekomme ncoh immer die Exception in thread ... angezeigt.

    Habe mit Kommentierung ausprobiert und entdeckt:
    Bsp 1
    text1 = 1 geteilt durch text2 = 100 wird im Fenster angezeigt Bildgröße 0.0 (vorher 1) und Gegenstandsgröße NaN (vorher 100) das Ergebnis JTextField Abbildungsmaßstab 0.0.
    Mit System.out.println funktionierts.
    Wenn ich die anderen if-Anweisungen auskommentiere dann funktioniert es.
    Vieleicht liegt der Feher dann doch auch in den Anweisungen****?
     

Ähnliche Themen

  1. Einstellungen werden nicht übernommen
    Von Neuk im Forum Photoshop
    Antworten: 2
    Letzter Beitrag: 09.09.11, 22:46
  2. JFace PreferenceDialog Werte werden nicht in PreferenceStore übernommen
    Von Another1 im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 0
    Letzter Beitrag: 17.09.08, 20:59
  3. Array Werte werden nicht übernommen
    Von Assanur im Forum C/C++
    Antworten: 2
    Letzter Beitrag: 04.08.08, 12:40
  4. VB code läuft aber berechnet die Werte nicht
    Von BWL80 im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 17.07.05, 18:15
  5. Variablen in URL werden nicht übernommen
    Von braindad im Forum PHP
    Antworten: 3
    Letzter Beitrag: 11.07.03, 09:33