Το θέμα κλειδώθηκε

Re: 4η ΓΡΑΠΤΗ ΕΡΓΑΣΙΑ 2011 - 2012

Πέμ Απρ 05, 2012 11:11 am

Για το datemodel στο datespinner μου δουλεύει κανονικά. Αν μπορούσες να ανεβάσεις το κομμάτι του κώδικα που έχει το πρόβλημα ίσως μπορέσω να σε βοηθήσω. Επίσης δοκίμασε να τρέξεις την εφαρμογή με debug, και βάλε ένα breakpoint στη γραμμή που πετάει το exception. Το eclipse έχει πολύ καλό debug, όπου μπορείς να δεις τις τιμές όλων των μεταβλητών εκείνη τη στιγμή, κτλ οπότε μπορείς να βγάλεις άκρη πιο εύκολα.
Τώρα για το σενάριο εγώ έκανα κάμποσες παραδοχές τις οποίες τις έγραψα στην άσκηση, αφού το σενάριο είναι πολύ ασαφές. Οπότε είπα για παράδειγμα αφού περνάει τόση ώρα και η θερμοκρασία ανεβαίνει με αυτό το ρυθμό βάλε τη θερμοκρασία τόσο, το χρόνο τόσο κτλ και βάζοντας αυτές τις τιμές ενεργοποιείται ο θερμοσίφωνας (από τον enactor), κτλ.

Re: 4η ΓΡΑΠΤΗ ΕΡΓΑΣΙΑ 2011 - 2012

Πέμ Απρ 05, 2012 12:37 pm

Καλά, από παραδοχές άλλο τίποτα! Κι εγώ γενικά έχω κάνει πολλές. Το θέμα είναι ότι και πάλι, δεν μπορώ να το καταφέρω να κάνει έστω κάτι... Σου παραθέτω τον κώδικά μου στο κομμάτι που αφορά το DateModel μήπως και δεις κάτι που εγώ δε βλέπω. Αλλιώς δεν ξέρω τι να κάνω, έχω απελπιστεί... :(
Κώδικας:
add(timeSpinner = new JSpinner(new SpinnerDateModel(new Date(date), null, null, Calendar.HOUR_OF_DAY)) {{
            
            JFormattedTextField tf = ((JSpinner.DefaultEditor) timeSpinner.getEditor()).getTextField();
             DefaultFormatterFactory factory = (DefaultFormatterFactory) tf.getFormatterFactory();
             DateFormatter formatter = (DateFormatter) factory.getDefaultFormatter();

             formatter.setFormat(new SimpleDateFormat("hh:mm"));
            tf.setForeground(Color.black);
            setFont(getFont().deriveFont(fontSize));
            
            addChangeListener(new ChangeListener() {
               @Override
               public void stateChanged(ChangeEvent evt) {
               int time = (Integer) timeSpinner.getValue();
               System.out.println(time);
               inputWidget.updateData("currTime", time);
                  
               }
            });
            
         }});

Μια εναλλακτική, η οποία πάλι βγάζει NullPointerException στην ίδια γραμμή είναι:
Κώδικας:
add(timeSpinner = new JSpinner(new SpinnerDateModel(new Date(date), null, null, Calendar.HOUR_OF_DAY)) {{
            String format = "hh:mm";
            final JSpinner.DateEditor editor = new JSpinner.DateEditor(timeSpinner, format);
            timeSpinner.setEditor(editor);
            final JFormattedTextField tf = editor.getTextField();
            tf.setForeground(Color.black);
            setFont(getFont().deriveFont(fontSize));
            
            addChangeListener(new ChangeListener() {
               @Override
               public void stateChanged(ChangeEvent evt) {
               int time = (Integer) timeSpinner.getValue();
               System.out.println(time);
               inputWidget.updateData("currTime", time);
                  
               }
            });
            
         }});

Re: 4η ΓΡΑΠΤΗ ΕΡΓΑΣΙΑ 2011 - 2012

Πέμ Απρ 05, 2012 2:07 pm

Wazka έγραψε:Καλά, από παραδοχές άλλο τίποτα! Κι εγώ γενικά έχω κάνει πολλές. Το θέμα είναι ότι και πάλι, δεν μπορώ να το καταφέρω να κάνει έστω κάτι... Σου παραθέτω τον κώδικά μου στο κομμάτι που αφορά το DateModel μήπως και δεις κάτι που εγώ δε βλέπω. Αλλιώς δεν ξέρω τι να κάνω, έχω απελπιστεί... :(


Και στις 2 παραδοχές δεν λες τι είναι το date. Long, String, Date?
Πάντως το exception που σου πετάει είναι επειδή πριν κατασκευάσεις τον timeSpinner (είσαι ακόμα την ώρα που το ορίζεις το χρησιμοποιείς για να ορίσεις το DateEditor. Όμως εκείνη τη στιγμή το timeSpinner είναι ακόμα null. Άρα λογικά παίρνεις nullPointerException.
Έτσι σου παραθέτω με μικρές αλλαγές τον κώδικά σου καθώς και ένα άλλο παράδειγμα που πιστεύω είναι λίγο καλύτερο. Πάντως όπως και να έχει επειδή το spinner χειρίζεται πλέον date θα πρέπει να παίρνεις date και μετά είτε να ορίσεις τον χρόνο σου στο widget ως long (date δεν το χειρίζεται το δοκίμασα) είτε να μετατρέψεις το date σε string, να πάρεις το νούμερο της ώρας και των λεπτών και να τα κάνεις integers και να τα βάλεις στις αντίστοιχες μεταβλητές.

Κώδικας:
add(timeSpinner = new JSpinner(new SpinnerDateModel(new Date(), null, null, Calendar.HOUR_OF_DAY)) {{
            setFont(getFont().deriveFont(fontSize));
            addChangeListener(new ChangeListener() {
               @Override
               public void stateChanged(ChangeEvent evt) {
               long time = ((Date) timeSpinner.getValue()).getTime();
               System.out.println(time);
               inputWidget.updateData("currTime", time);
               }
            });
         }});
      JFormattedTextField tf = ((JSpinner.DefaultEditor) timeSpinner.getEditor()).getTextField();
        DateFormat formatter = new SimpleDateFormat("HH:mm");
        tf.setForeground(Color.black);


Κώδικας:
add(timeSpinner = new JSpinner(new SpinnerDateModel(new Date(), null, null, Calendar.HOUR_OF_DAY)) {{
            setFont(getFont().deriveFont(fontSize));
            addChangeListener(new ChangeListener() {
               @Override
               public void stateChanged(ChangeEvent evt) {
               long time = ((Date) timeSpinner.getValue()).getTime();
               DateFormat formatter = new SimpleDateFormat("HH:mm");
               String timeInString = formatter.format(time);
               System.out.println(timeInString);
               System.out.println("hours:" + Integer.parseInt(timeInString.substring(0,2)));
               System.out.println("minutes:" + Integer.parseInt(timeInString.substring(3,5)));
               inputWidget.updateData("time", time);
               }
            });
           
         }});
      String format = "hh:mm";
      final JSpinner.DateEditor editor = new JSpinner.DateEditor(timeSpinner, format);
        timeSpinner.setEditor(editor);
        final JFormattedTextField tf = editor.getTextField();
        tf.setForeground(Color.black);


Κώδικας:
      add(timeSpinner = new JSpinner(new SpinnerDateModel(new Date(), null, null, Calendar.HOUR_OF_DAY)){
         {
            addChangeListener(new ChangeListener() {
               @Override
               public void stateChanged(ChangeEvent evt) {
                  long time = ((Date)timeSpinner.getValue()).getTime();
                  inputWidget.updateData("currTime", time);
                  System.out.println("time: " + new SimpleDateFormat("HH:mm").format(time));
               }
            });
            setEditor(new JSpinner.DateEditor(this, "HH:mm"));
         }
      });
      
      long time = ((Date)timeSpinner.getValue()).getTime();//in order to initialize widget
      inputWidget.updateData("currTime", time);//in order to initialize widget


Λογικά και τα 3 λειτουργούν σωστά.
Τελευταία επεξεργασία απο taghor την Πέμ Απρ 05, 2012 2:19 pm, επεξεργάστηκε 1 φορές συνολικά.

Re: 4η ΓΡΑΠΤΗ ΕΡΓΑΣΙΑ 2011 - 2012

Πέμ Απρ 05, 2012 2:11 pm

Σ' ευχαριστώ πολύ και πάλι, που αφιέρωσες το χρόνο και ασχολήθηκες!! :)
Το date το έχω δηλώσει ως long λίγες γραμμές πιο πάνω, εκεί που δηλώνω μεταβλητές.
Δεν έχω δοκιμάσει τίποτα από αυτά που μου έστειλες. Πάω να το κάνω ΤΩΡΑ!!

Re: 4η ΓΡΑΠΤΗ ΕΡΓΑΣΙΑ 2011 - 2012

Πέμ Απρ 05, 2012 11:06 pm

Καλησπέρα σας.

Μπορεί κάποιος να μου εξηγήσει μήπως τι αναπαριστά η "Έξοδος" στο "Σύστημα Ειδοποίησης" στο προτεινόμενο interface που μας έχει δωθεί?

Endeiktikes Apantiseis 4is Ergasias

Πέμ Απρ 26, 2012 12:32 pm

"Endeiktikes Apantiseis 4is Ergasias"

Kalispera :) Kserei kaneis pou mporo na tis do;

Re: Endeiktikes Apantiseis 4is Ergasias

Πέμ Απρ 26, 2012 1:32 pm

Δε νομίζω ότι έχουν βγει. Στο ΑΘΗ-1 ακόμα δεν έχει βγάλει ούτε βαθμούς δηλαδή. Γενικώς η ενασχόληση των καθηγητών με την ενότητα πάσχει σοβαρά...

Re: 4η ΓΡΑΠΤΗ ΕΡΓΑΣΙΑ 2011 - 2012

Παρ Μάιος 04, 2012 3:57 pm

Ξέρει κανείς αν έχουν βγει βαθμοί για την 4η Γ.Ε.; Έχει περάσει ένας μήνας που την παραδώσαμε και ακόμα τίποτα...

Re: 4η ΓΡΑΠΤΗ ΕΡΓΑΣΙΑ 2011 - 2012

Παρ Μάιος 04, 2012 5:57 pm

Και γιατί δεν παραπονιέστε βρε παιδιά και δεν στέλνετε κάποιο mail;

Endeiktikes Luseis tetartis ergasias

Κυρ Μάιος 27, 2012 2:38 pm

Kat'arxas, s'euxaristo k.Galati! Exei paratirisei kaneis pou eine autes oi endeiktikes?
euxaristo ek twn proterwn
Το θέμα κλειδώθηκε