απορια σε java

Συζητήσεις για γλώσσες προγραμματισμού και θέματα σχετικά με προγραμματισμό.
User avatar
Ισοβίτης
Venus Former Team Member
Posts: 1262
Joined: Sat Apr 21, 2007 5:45 pm
Gender:
Location: Πίσω από τα σίδερα
Contact:

Re: απορια σε java

Post by Ισοβίτης » Tue May 19, 2009 11:13 pm

Αν από design mode το γυρίσεις σε source mode μπορείς να βλέπεις και να πειράζεις τα περισσότερα, αλλά όχι όλα, καθώς το Netbeans κρίνει ότι πρέπει να σου απαγορέψει να editάρεις συγκεκριμένα κομμάτια (όπως πχ η δήλωση των διαφόρων components).

Μπορείς να εφαρμόζεις αλλαγές επί αυτών κάνοντας στο κάθε components δεξί κλικ -> Properties. Έτσι, μπορείς να τα παραμετροποιήσεις κατά βούληση.

Γενικώς, η swing είναι χάλια, παρότι ο designer του Netbeans καταβάλλει φιλότιμες προσπάθειες...
Συγχώρα με που δεν καταλαβαίνω τι λένε τα κομπιούτερς κι οι αριθμοί...

Image

Find me: Image Image Image Image Image
User avatar
cypher
Venus Former Team Member
Posts: 6207
Joined: Mon Sep 29, 2008 9:12 pm
Academic status: Alumnus/a
Gender:

Re: απορια σε java

Post by cypher » Tue May 19, 2009 11:15 pm

Ισοβίτης wrote:Αν από design mode το γυρίσεις σε source mode μπορείς να βλέπεις και να πειράζεις τα περισσότερα, αλλά όχι όλα, καθώς το Netbeans κρίνει ότι πρέπει να σου απαγορέψει να editάρεις συγκεκριμένα κομμάτια (όπως πχ η δήλωση των διαφόρων components).

Μπορείς να εφαρμόζεις αλλαγές επί αυτών κάνοντας στο κάθε components δεξί κλικ -> Properties. Έτσι, μπορείς να τα παραμετροποιήσεις κατά βούληση.

Γενικώς, η swing είναι χάλια, παρότι ο designer του Netbeans καταβάλλει φιλότιμες προσπάθειες...
Ναι, το ξερω αυτο. :-p Εγω ζηταω να "αλλαξω" και αυτα που μου απαγορευει το netbeans να πειραξω κατευθειαν απο το source για να μην κανω συνεχως το δεξί κλικ -> Properties σε καθε component. Δηλαδη δεν θελω κανενα μα κανενα περιορισμο. :-p Εννοειται μεσα στο Jframe και οχι φτιαχνωντας νεα κλαση απλα γιατι με βολευει και το design mode.
ImageImageImageImageImageImageImage
User avatar
~~Wind~~
Gbyte level
Gbyte level
Posts: 1747
Joined: Thu Nov 30, 2006 1:07 am
Academic status: N>4
Gender:
Location: *void

Re: απορια σε java

Post by ~~Wind~~ » Tue May 19, 2009 11:52 pm

Δεξί κλικ --> Customize Code, δε σ'αφήνει να τα πειράξεις όλα αλλά αρκετά.
σε NetBeans-6.7b
ImageImage
Come to foss-aueb ...we have cookies.. yamyam~nomnomnomnomnomnomnomnom
a cookie ~ I will do science to it
User avatar
Luke
Gbyte level
Gbyte level
Posts: 1388
Joined: Wed Aug 09, 2006 11:19 am
Academic status: Alumnus/a
Gender:

Re: απορια σε java

Post by Luke » Sat May 23, 2009 10:26 am

Ή τελικά, αν τίποτα δε σε καλύπτει, απλά ανοίγωντας τα src files με κάποιον άλλο editor. Βέβαια σε αυτή την περίπτωη δε θα χρησιμοποιήσεις netbeans. :)
Είμαι ένας μοναχικός cowboy...
User avatar
cypher
Venus Former Team Member
Posts: 6207
Joined: Mon Sep 29, 2008 9:12 pm
Academic status: Alumnus/a
Gender:

Re: απορια σε java

Post by cypher » Mon Jun 01, 2009 9:29 pm

Luke wrote:Ή τελικά, αν τίποτα δε σε καλύπτει, απλά ανοίγωντας τα src files με κάποιον άλλο editor. Βέβαια σε αυτή την περίπτωη δε θα χρησιμοποιήσεις netbeans. :)
Αυτο εφαρμοσα και τοτε. :-p
---------------------------------
Λοιπον ρωταω εδω γιατι μου εχει σπασει τα νευρα τοσην ωρα που δεν το βρισκω.
Εστω οτι εχω εναν πινακα με 10 (π.χ.) JTextArea's σε ενα panel. Σε καθε ενα απο αυτα εχω ορισει ενα mouseListener ακολουθως:

Code: Select all

area[i].addMouseListener(new MouseListener() {

                     public void mouseClicked(MouseEvent e) {}

                     public void mousePressed(MouseEvent e) {
                              //methodos bla bla pou xrisimopoio 
                     }
                     public void mouseReleased(MouseEvent e) {}
                     public void mouseEntered(MouseEvent e) {}
                     public void mouseExited(MouseEvent e) {}
             });
οπου το i παει απο 0 μεχρι 9.
Και θελω στο σημειο που εχω Την μεθοδο bla bla να βρω πιο JTextArea ηταν αυτο που προκαλεσε το event ετσι ωστε να κανω μετα getText απο εκεινο και να παρω το κειμενο που θελω. Το λογικο θα ηταν το e.getComponent(); να μου επιστρεφει το component που εχει το event αλλα μου επιστρεφει καποια ασχετη κλαση. :-p :-p

Καμια ιδεα;

υ.γ. παιζει να κανω καμια χαζομαρα και να ειναι απλη η λυση :-p

ΕΔΙΤ: Βλακεια μου τελικα :-p Google-ισα λιγο παραπανω και τελικα κανω

Code: Select all

((JTextArea) e.getSource()).getText();
για να παρω το κειμενο. Προηγουμενως δεν εκανα casting σε JTextArea και μου επεστρεφε την κλαση ως Component που ειναι υπερκλαση. :smt021
Πφφ. Παω να συνεχισω. :-p


------------------------------------------------------------------------------------------------------

Ουφ, επομενη απορια και αν ολα πανε καλα θα ειναι και η τελικη.
Εστω οτι εχω ενα JScrollPane στο οποιο βαζω ως ορισμα κατα την δημιουργια του instance ενα JList το οποιο JList το εχω ορισει με εναν Vector που παιρνει μονο JTextArea( γιατι θελω να παρουσιαζει πολλες γραμμες στο string του).
Οταν το τρεχω η λιστα μου εμφανιζεται κανονικα μονο που το καθε JTextArea μου το εμφανιζει σαν Object (Σαν να κανει δηλαδη Object.toString() ) αντι να μου εμφανιζει κανονικα το TextArea. :smt017
Ψαχνω να βρω τις πταιει.
Ο βασικος κωδικας ειναι ουσιαστικα αυτος:

Code: Select all

JList list;
        Vector <JTextArea> texts=new Vector<JTextArea>();
        for(int i=0;i<size();i++){  //to size anatheretai se allon vector...
            JTextArea textArea=new JTextArea();
            textArea.setMargin(new Insets(5,5,5,5));
            textArea.setText("Bla Bla");
            textArea.setEditable(false);
            textArea.setLineWrap(true);
            texts.add(orderInfo);
        }
        list=new JList( texts );

        JScrollPane scroll=new JScrollPane(list, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);;
        scroll.setVisible(true);
        
Εχει κανεις κανα idea ; :-p
ImageImageImageImageImageImageImage
User avatar
maxthebest
Kilobyte level
Kilobyte level
Posts: 180
Joined: Fri Dec 02, 2005 5:23 pm
Location: Παράδεισος

Re: απορια σε java

Post by maxthebest » Tue Jun 02, 2009 9:50 am

Τα Jlists θα εμφανιζουν κειμενο(δεν εμφανιζουν components), οποτε φυσικο ειναι να καλει την .toString,

Τωρα για να το κανεις να εμφανιζει Components.

πολυ απλα, φτιαξε δικο σου ListCellRenderer οπου στην getListCellRendererComponent θα επιστρεφει το components που θες να εχει σε καθε κουτακι.

http://java.sun.com/j2se/1.4.2/docs/api ... derer.html

http://java.sun.com/products/jfc/tsc/te ... jlist.html
Ούτοι συνέχθειν, αλλά συμφιλείν έφυν (Αντιγόνη στοίχος 523) =
Δεν γεννήθηκα για να συμμερίζομαι το μίσος , αλλά για να αγαπώ και να με αγαπούν.
User avatar
cypher
Venus Former Team Member
Posts: 6207
Joined: Mon Sep 29, 2008 9:12 pm
Academic status: Alumnus/a
Gender:

Re: απορια σε java

Post by cypher » Tue Jun 02, 2009 1:19 pm

Μαλιστα, δεν γνωριζα για αυτην τους την ιδιοτητα. Εφτιαξα εναν αλλον renderer λοιπον οπως εδειχνε περιπου το api:

Code: Select all

public class CellRenderer extends DefaultListCellRenderer {

    public Component getListCellRendererComponent(JList list,
            Object value, // value to display
            int index, // cell index
            boolean iss, // is the cell selected
            boolean chf) {   // the list and the cell have the focus

        super.getListCellRendererComponent(list, value, index, iss, chf);
         
        return new JTextArea(((JTextArea)value).getText());
    }
}
και λειτουργει κανονικα. Πρεπει να αλλαξω ενα καρο πραγματα παλι μιας και δοκιμαζα διαφορετικες λυσεις αλλα φαινεται πολυ πιο ωραιο. :smt007
Φενκ γιου βερυ βερυ ματσ. :) :)
ImageImageImageImageImageImageImage
User avatar
Van51
Kilobyte level
Kilobyte level
Posts: 429
Joined: Tue Dec 02, 2008 8:41 pm
Academic status: N>4
Gender:

Re: απορια σε java

Post by Van51 » Sun Dec 20, 2009 3:50 pm

παιδια εχω και γω μια απλη αποριουλα.. ποια ειναι η διαφορα αυτων των 2 :

Code: Select all

class Bla implements Comparable {}
και

Code: Select all

class Bla implements Comparable<Bla> {}
?
User avatar
Loner
Venus Former Team Member
Posts: 4004
Joined: Fri Oct 26, 2007 11:08 pm
Academic status: N>4
Gender:
Location: Στη ρωγμή του χρόνου

Re: απορια σε java

Post by Loner » Sun Dec 20, 2009 4:00 pm

Χωρίς να είμαι σίγουρος, όταν αυτό που θα περάσεις ως όρισμα στην compareTo και με το οποίο θέλεις να συγκρίνεις το this ή κάποια μεταβλητή είναι πρωταρχικός τύπος της Java χρησιμοποιείς

Code: Select all

class Bla implements Comparable {}
και όταν θέλεις στην compareTo να συγκρίνεις με ένα αντικείμενο δικιάς σου τάξης (στο παράδειγμα της τάξης Bla) τότε πρέπει να το δηλώσεις στο implements, όπως εδώ

Code: Select all

class Bla implements Comparable<Bla> {}
You either die a Spongebob or live long enough to see yourself become the Squidward.
User avatar
statakos
Kilobyte level
Kilobyte level
Posts: 482
Joined: Wed Sep 17, 2008 3:07 am
Academic status: Alumnus/a
Gender:

Re: απορια σε java

Post by statakos » Sun Dec 20, 2009 4:05 pm

Επίσης, να αναφέρω πως και στην πρώτη περίπτωση μπορείς να συγκρίνεις κάνοντας cast το Οbject στο αντικείμενό σου π.χ. Bla.
"Always program as if the person who will be maintaining your program is a violent psychopath that knows where you live."
User avatar
Van51
Kilobyte level
Kilobyte level
Posts: 429
Joined: Tue Dec 02, 2008 8:41 pm
Academic status: N>4
Gender:

Re: απορια σε java

Post by Van51 » Sun Dec 20, 2009 4:44 pm

δηλαδη με τον πρωτο τροπο εχουμε την δυνατοτητα να συγκρινουμε το instance μας με κατι αλλο πέρα απο άλλα αντικειμενα της ιδιας ταξης και με τον δευτερο το συγκρινουμε μονο με αλλα Bla .. ε?
User avatar
Luke
Gbyte level
Gbyte level
Posts: 1388
Joined: Wed Aug 09, 2006 11:19 am
Academic status: Alumnus/a
Gender:

Re: απορια σε java

Post by Luke » Sun Dec 20, 2009 5:09 pm

Van51 wrote:δηλαδη με τον πρωτο τροπο εχουμε την δυνατοτητα να συγκρινουμε το instance μας με κατι αλλο πέρα απο άλλα αντικειμενα της ιδιας ταξης
Σωστά. Μπορείς να συγκρίνεις με οποιοδήποτε κλάση (που στην ουσία κάνει extend την Object).
Van51 wrote:και με τον δευτερο το συγκρινουμε μονο με αλλα Bla .. ε?
Επίσης σωστό. Με αυτό τον τρόπο στην ουσία "προστατέυεις" το χρήστη από το να κάνει λάθος, δηλαδή αν πάει να συγκρίνει "Apple" με "Orange" (έστω τα ονόματα 2 κλάσεων) θα προκύψει σφάλμα στη μεταγλώττιση. Έτσι θα τον περιορίσει ώστε να συγκρίνει μόνο όμοια πράγματα μεταξύ τους (π.χ. 2 αντικείμενα "Apple" ή "Bla" όπως τα λες).
Είμαι ένας μοναχικός cowboy...
User avatar
Van51
Kilobyte level
Kilobyte level
Posts: 429
Joined: Tue Dec 02, 2008 8:41 pm
Academic status: N>4
Gender:

Re: απορια σε java

Post by Van51 » Sun Dec 20, 2009 5:17 pm

οκ ευχαριστω πολυ παιδια :)
User avatar
para
Wow! Terabyte level
Wow! Terabyte level
Posts: 3648
Joined: Sat Nov 04, 2006 2:59 am
Academic status: Alumnus/a
Gender:

Re: απορια σε java

Post by para » Tue Dec 22, 2009 12:19 pm

Πώς στο καλό γράφουμε σε αρχείο; :smt013 :smt013

Μου βγαίνουν όλα κινέζικα.
Γύρνα είμαι ένα άψυχο κορμί που σ' αγαπάει, αισθάνομαι στον άνεμο φτερό
Σαν μέσα σε όνειρο η ζωή με προσπερνάει, δείξε μου οίκτο μια στιγμή παρακαλώ...
#!
Κοίτα πως με κατάντησε η δική σου η αγάπη, να μη γνωρίζω από που να κρατηθώ
Στο τελευταίο της ζωής το σκαλοπάτι, Γύρνα, είμαι ένα βήμα απ' το γκρεμό...
User avatar
ultimate_aektzis
Wow! Terabyte level
Wow! Terabyte level
Posts: 6373
Joined: Tue Nov 13, 2007 10:11 pm
Gender:

Re: απορια σε java

Post by ultimate_aektzis » Tue Dec 22, 2009 12:20 pm

Παρε την inputstreamreader που αλλαζει και το encoding.
User avatar
para
Wow! Terabyte level
Wow! Terabyte level
Posts: 3648
Joined: Sat Nov 04, 2006 2:59 am
Academic status: Alumnus/a
Gender:

Re: απορια σε java

Post by para » Tue Dec 22, 2009 12:28 pm

Απίστευτα γρήγορη απάντηση! :-)

Thanks dude! Δούλεψε! :)
Γύρνα είμαι ένα άψυχο κορμί που σ' αγαπάει, αισθάνομαι στον άνεμο φτερό
Σαν μέσα σε όνειρο η ζωή με προσπερνάει, δείξε μου οίκτο μια στιγμή παρακαλώ...
#!
Κοίτα πως με κατάντησε η δική σου η αγάπη, να μη γνωρίζω από που να κρατηθώ
Στο τελευταίο της ζωής το σκαλοπάτι, Γύρνα, είμαι ένα βήμα απ' το γκρεμό...
User avatar
cypher
Venus Former Team Member
Posts: 6207
Joined: Mon Sep 29, 2008 9:12 pm
Academic status: Alumnus/a
Gender:

Re: απορια σε java

Post by cypher » Tue Dec 22, 2009 12:52 pm

Μια αλλη σιγουρη λυση απλα για να εχεις υποψιν σου ειναι και αυτο:
PrintWriter out2 = new PrintWriter(new OutputStreamWriter(new FileOutputStream("Sample.txt"), "8859_7" ));
Οπου στον κατασκευαστη αν θες οριζεις και το encoding και τυπωνεις παρα πολυ απλα με μια μεθοδο print η println. :)
ImageImageImageImageImageImageImage
User avatar
para
Wow! Terabyte level
Wow! Terabyte level
Posts: 3648
Joined: Sat Nov 04, 2006 2:59 am
Academic status: Alumnus/a
Gender:

Re: απορια σε java

Post by para » Tue Dec 22, 2009 1:00 pm

Ευχαριστώ πολύ!! :)
Γύρνα είμαι ένα άψυχο κορμί που σ' αγαπάει, αισθάνομαι στον άνεμο φτερό
Σαν μέσα σε όνειρο η ζωή με προσπερνάει, δείξε μου οίκτο μια στιγμή παρακαλώ...
#!
Κοίτα πως με κατάντησε η δική σου η αγάπη, να μη γνωρίζω από που να κρατηθώ
Στο τελευταίο της ζωής το σκαλοπάτι, Γύρνα, είμαι ένα βήμα απ' το γκρεμό...
User avatar
Theofaman
Mbyte level
Mbyte level
Posts: 984
Joined: Sat Sep 24, 2005 1:07 am
Academic status: Alumnus/a
Gender:
Location: Running from the weak side to the low post

Re: απορια σε java

Post by Theofaman » Thu Dec 31, 2009 3:51 pm

Έχω απορία! :-)
Έστω ότι έχω 2 κλάσεις, μία Main.java

Code: Select all

public class Main {    
    public static void main(String[] args) {
       TD t = new TD();
       Thread t1 = new Thread(t);
       t1.start();
       System.out.println(t.getStr());
    }
}
και μία TD.java η οποία απλά στην run() δίνει μια τιμή σε ένα String.

Code: Select all

public class TD implements Runnable
{
    private String str;
    public  synchronized  String getStr() {
        return str;
    }
    public void run()
    {
        str = new String ("Etoimo to thread");
    }
}
Μήπως γνωρίζει κάποιος γιατί στην Main.java η t.getStr() επιστρέφει null?
Ευχαριστώ! :)
Theo(pame na)fam(e mprizoles)an!
User avatar
tsilochr
Wow! Terabyte level
Wow! Terabyte level
Posts: 3246
Joined: Tue Mar 16, 2004 2:47 pm
Academic status: PhD
Gender:
Location: mm.aueb.gr
Contact:

Re: απορια σε java

Post by tsilochr » Thu Dec 31, 2009 4:05 pm

πολύ χονδρικά διότι το 2ο thread έχει ξεχωριστή μνήμη και το String str δεν είναι μοναδικό. Έχει να κάνει με το memory model της jvm και πως υλοποιούνται τα threads (και τα οποία δεν ακολουθούν τον κανόνα ότι έχουμε κοινή μνήμη κλπ κλπ). Για να πετύχεις αυτό που θες (δλδ τα writes σε μια μεταβλητή να είναι εμφανή σε όλα τα thread της jvm), είτε κάνε την μέθοδο getStr() synchronized ή δήλωσε το πεδίο str ως volatile (προτείνεται το synchronized).

Btw, αν ασχολείσαι με multithreading σε java, το καλύτερο βιβλίο είναι το java concurrency in practice
User avatar
Theofaman
Mbyte level
Mbyte level
Posts: 984
Joined: Sat Sep 24, 2005 1:07 am
Academic status: Alumnus/a
Gender:
Location: Running from the weak side to the low post

Re: απορια σε java

Post by Theofaman » Thu Dec 31, 2009 4:16 pm

tsilochr wrote:πολύ χονδρικά διότι το 2ο thread έχει ξεχωριστή μνήμη και το String str δεν είναι μοναδικό. Έχει να κάνει με το memory model της jvm και πως υλοποιούνται τα threads (και τα οποία δεν ακολουθούν τον κανόνα ότι έχουμε κοινή μνήμη κλπ κλπ). Για να πετύχεις αυτό που θες (δλδ τα writes σε μια μεταβλητή να είναι εμφανή σε όλα τα thread της jvm), είτε κάνε την μέθοδο getStr() synchronized ή δήλωσε το πεδίο str ως volatile (προτείνεται το synchronized).

Btw, αν ασχολείσαι με multithreading σε java, το καλύτερο βιβλίο είναι το java concurrency in practice
Μα η getStr() ειναι synchronized!
Θα ριξω μια ματια στο βιβλιο :-)

EDIT: Τελικά δούλεψε κάνοντας 2 φορές System.out.println(t.getStr()); με output
Null
Etoimo to thread
:smt017
Theo(pame na)fam(e mprizoles)an!
User avatar
Zifnab
Venus Former Team Member
Posts: 7581
Joined: Tue Nov 15, 2005 2:42 am
Academic status: MSc
Gender:
Location: Connecticut
Contact:

Re: απορια σε java

Post by Zifnab » Thu Dec 31, 2009 4:58 pm

Το null βγαίνει γιατί τρέχει η System.out.println(t.getStr()); προτού τρέξει η εντόλη μέσα στο run() του thread που γεμίζει το String...
Τώρα πως θα το αποτρέψεις δεν ξέρω... εξαρτάται τί θέλεις να κάνεις.
Post Reply

Return to “Προγραμματισμός”