Sadako Δημοσ. 8 Σεπτεμβρίου 2007 Δημοσ. 8 Σεπτεμβρίου 2007 Έχω ένα απλό JFrame interface που αποτελείται απλά απο 2 κουμπιά. Θέλω να βάλω απο κάτω (ή δίπλα ή όπου να'ναι τέλος πάντων), όπου να βάζω γράφω μια τιμή (ακέραιο), και να το παίρνει αυτό το πρόγραμμα και να το βάζει σε μια μεταβλητή. Αυτό συγκεκριμένα να γίνεται σε real-time. Δηλαδή όταν πατάω το start να αρχίζει το πρόγραμμα με την τιμή που έχει εκείνη τη στιγμη, κι αν πατήσω stop και αλλάξω την τιμή, όταν ξαναπατήσω start να ξαναρχίσει, αλλά με την νέα τιμή.. Από ό,τι είδα από google, αυτό μπορώ να το κάνω με JTextField.. Αλλά μάλλον κάτι δεν κάνω καλά με τους listeners κλπ, γιατί δεν δουλεύει.. > public class MPLA extends JFrame { int delay; public static void main(String args[]) { new MPLA(); } //constructor public MPLA() { //interface buttons final JButton startBtn = new JButton("Start"); final JButton stopBtn = new JButton("Stop"); final JTextField jtfInput = new JTextField("40", 4); //initial states of buttons startBtn.setEnabled(true); stopBtn.setEnabled(false); //Register anonymous listeners startBtn.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { .... } } ); getContentPane().add(startBtn); //Register anonymous listeners stopBtn.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { .... } } ); getContentPane().add(stopBtn); jtfInput.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { delay = (int)Integer.parseInt(jtfInput.getText().trim()); } } ); getContentPane().add(jtfInput); getContentPane().setLayout(new FlowLayout()); setTitle("mpla mpla"); setDefaultCloseOperation(EXIT_ON_CLOSE); setSize(250,250); setVisible(true); .... .... } } } Και θέλω αυτό που είναι στο JTextField να το περνάω στο delay. Τι δεν κάνω καλά?? :-?
alex2005 Δημοσ. 8 Σεπτεμβρίου 2007 Δημοσ. 8 Σεπτεμβρίου 2007 Είναι σχεδόν αδύνατον να κατανοήσω ακριβώς τι θέλεις να πεις. Τέλος πάντων. Αν καταλαβαίνω θέλεις όταν πατάς start να εκτελείται κάτι με την τιμή που έχει το JTextField?Αν ναι τότε τον κώδικα που έχεις μέσα στον ActionListener που έχεις προσθέσει στο JTextField πρέπει να τον βάλεις να εκτελείται μέσα στον ActionListener του κουμπιού. Τι θέλω να πω: Αυτήν την στιγμή θα εκτελεστεί ο κώδικας: >delay = (int)Integer.parseInt(jtfInput.getText().trim()); μόνο όταν πατήσεις enter καθώς γράφεις στο JTextField....που νομίζω δεν είναι αυτό που θέλεις. Οπότε ο "σωστός" τρόπος (αν καταλαβαίνω καλά αυτό που θέλεις) είναι: > startBtn.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { delay = (int)Integer.parseInt(jtfInput.getText().trim()); .... } } ); Αν θέλεις να καταχωρείται αυτόματα η τιμή την στιγμή που γράφεις στο JTextField τότε πρέπει να κάνεις το εξής: >jtfInput.addCaretListener( new javax.swing.event.CaretListener() { public void caretUpdate(javax.swing.event.CaretEvent e) { delay = (int)Integer.parseInt(jtfInput.getText().trim()); System.out.println("I'm executed!!!"); } } );
bilco Δημοσ. 8 Σεπτεμβρίου 2007 Δημοσ. 8 Σεπτεμβρίου 2007 Μια παρατήρηση Sadako. Όσες φορές έχεις δημοσιεύσει απορίες σε αυτό το forum (αυτές τουλάχιστον που έχω δει εγώ), ένα ευχαριστώ δεν έχεις πει σε όσους απάντησαν.
Sadako Δημοσ. 9 Σεπτεμβρίου 2007 Μέλος Δημοσ. 9 Σεπτεμβρίου 2007 bilco, αν το έκανα τόσο έντονα ώστε να το προσέξει κάποιος, οφείλω να ζητήσω συγνώμη.. Απλά συνήθως επειδή μέχρι τελευταία στιγμή τα ψάχνω μόνος μου, τελευταία στιγμή αναζητώ βοήθεια στα φόρουμ, και μέσα στο τρέξιμο και τον πανικό, παίρνω την απάντηση και την δοκιμάζω, αλλά ξεχνάω να πω ευχαριστώ.. Sorry, δεν το κάνω εσκεμμένα..
bilco Δημοσ. 9 Σεπτεμβρίου 2007 Δημοσ. 9 Σεπτεμβρίου 2007 ΟΚ κατανοητό. Δεν το λέω όμως μόνο για λόγους ευγένειας, αλλά και για να κλείνουν τα threads με κάποιο τρόπο. Sorry για το off topic
Sadako Δημοσ. 9 Σεπτεμβρίου 2007 Μέλος Δημοσ. 9 Σεπτεμβρίου 2007 OK, το κατάφερα τελικά, έπρεπε να μεταφέρω κι άλλη μια statement μέσα στον Listener του start button, γιατί διαφορετικά κολλούσε στο runtime η CPU στο 100%.. Ευχαριστώ πάντως..
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.