Προς το περιεχόμενο

[JAVA]: JTextField, που το μπουρδουκλώνω?


Sadako

Προτεινόμενες αναρτήσεις

Δημοσ.

Έχω ένα απλό 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. Τι δεν κάνω καλά?? :-?

Δημοσ.

Είναι σχεδόν αδύνατον να κατανοήσω ακριβώς τι θέλεις να πεις.

Τέλος πάντων.

 

Αν καταλαβαίνω θέλεις όταν πατάς 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!!!");
               
               }
             }
       );

Δημοσ.

Μια παρατήρηση Sadako. Όσες φορές έχεις δημοσιεύσει απορίες σε αυτό το forum (αυτές τουλάχιστον που έχω δει εγώ), ένα ευχαριστώ δεν έχεις πει σε όσους απάντησαν.

Δημοσ.

bilco, αν το έκανα τόσο έντονα ώστε να το προσέξει κάποιος, οφείλω να ζητήσω συγνώμη.. Απλά συνήθως επειδή μέχρι τελευταία στιγμή τα ψάχνω μόνος μου, τελευταία στιγμή αναζητώ βοήθεια στα φόρουμ, και μέσα στο τρέξιμο και τον πανικό, παίρνω την απάντηση και την δοκιμάζω, αλλά ξεχνάω να πω ευχαριστώ..

 

Sorry, δεν το κάνω εσκεμμένα..

Δημοσ.

ΟΚ κατανοητό.

Δεν το λέω όμως μόνο για λόγους ευγένειας, αλλά και για να κλείνουν τα threads με κάποιο τρόπο.

Sorry για το off topic

Δημοσ.

OK, το κατάφερα τελικά, έπρεπε να μεταφέρω κι άλλη μια statement μέσα στον Listener του start button, γιατί διαφορετικά κολλούσε στο runtime η CPU στο 100%..

 

Ευχαριστώ πάντως..

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...