Japplet networking

Συζητήσεις για την Java

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
virxen75
Δημοσιεύσεις: 493
Εγγραφή: 18 Φεβ 2009 00:17
Τοποθεσία: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ

Japplet networking

Δημοσίευση από virxen75 » 21 Ιούλ 2009 01:19

1)αποθηκεύεις την θέση του κέρσορα του χρήστη πριν το update--->getCarretPosition
2)μετά το update βάζεις τον κέρσορα στο σημείο που ήταν-->setCarretPosition

δες το παράδειγμα διορθωμένο λίγο
έχει αλλάξει στο ότι αν βάλεις τιμή line,column και μετά πατήσεις
UPDATE σου βάζει τον κέρσορα εκεί που θες.

Κώδικας: Επιλογή όλων

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Test extends JFrame {
    JTextArea jta = new JTextArea("πως θα βρω την θεση του\n κέρσορα\nμέσα στο κείμενο μου\n");
 JTextField txtLine,txtColumn;
    public Test() {
       txtLine=new JTextField(4);
       txtColumn=new JTextField(4);
       JLabel lbl1=new JLabel("line");
       JLabel lbl2=new JLabel("column");
       JPanel p1=new JPanel();
   JButton jb1 = new JButton("UPDATE");
       p1.add(lbl1);
       p1.add(txtLine);
       p1.add(lbl2);
   p1.add(txtColumn);
          p1.add(jb1);

   setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
   Container content = getContentPane();
   content.add(new JScrollPane(jta), BorderLayout.CENTER);
   content.add(p1,BorderLayout.EAST);
   JButton jb = new JButton("ΠΑΤΑ ΝΑ ΔΕΙΣ ΠΟΥ ΒΡΙΣΚΕΣΑΙ");
   content.add(jb, BorderLayout.SOUTH);
   jb.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent ae) {
      int cpos = jta.getCaretPosition(), lpos=-1, line=-1;
      try {
          for &#40;int x=0; x<jta.getLineCount&#40;&#41;; x++&#41; &#123;
         if &#40;jta.getLineStartOffset&#40;x&#41;<=cpos&#41; &#123;
             line=x;
             lpos = cpos-jta.getLineStartOffset&#40;x&#41;;
         &#125; else break;
          &#125;
          txtLine.setText&#40;""+line&#41;;
           txtColumn.setText&#40;""+lpos&#41;;
      &#125; catch &#40;javax.swing.text.BadLocationException ble&#41; &#123;
          ble.printStackTrace&#40;&#41;;
      &#125;
      jta.requestFocus&#40;&#41;;
       &#125;
   &#125;&#41;;
   jb1.addActionListener&#40;new ActionListener&#40;&#41; &#123;
       public void actionPerformed&#40;ActionEvent ae&#41; &#123;
       	      try &#123;
int position=jta.getLineStartOffset&#40;Integer.parseInt&#40;txtLine.getText&#40;&#41;&#41;&#41;+Integer.parseInt&#40;txtColumn.getText&#40;&#41;&#41;;
      jta.setCaretPosition&#40;position&#41;;
            &#125; catch &#40;javax.swing.text.BadLocationException ble&#41; &#123;
          ble.printStackTrace&#40;&#41;;
      &#125;
      jta.requestFocus&#40;&#41;;
       &#125;
   &#125;&#41;;
   setSize&#40;600,300&#41;;
   show&#40;&#41;;
    &#125;
    public static void main&#40; String args&#91;&#93; &#41; &#123; new Test&#40;&#41;; &#125;
&#125; 

Άβαταρ μέλους
virxen75
Δημοσιεύσεις: 493
Εγγραφή: 18 Φεβ 2009 00:17
Τοποθεσία: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ

Japplet networking

Δημοσίευση από virxen75 » 21 Ιούλ 2009 01:40

επόμενο πρόβλημα
insert


το insert προσθέτει στην θέση που θέλω αυτό που θέλω(String)
σε περίπτωση λάθους---->
catch(...){
εδώ δηλαδή;
}

αντί insert κάνουμε append το κείμενο-χαρακτήρα που θέλουμε και τόσα κενά πριν ώστε να εμφανισθεί το κειμενο-χαρακτήρας μας στην σωστή θέση.

δοκίμασε να το φτιάξεις και αν κάτι δεν καταλαβαίνεις πες να σου στείλω κώδικα.
=========================================================

εδώ πρέπει να προσέξεις βέβαια τι θα συμβεί αν ο χρήστης μαρκάρει ένα κομμάτι κείμενο
και πατήσει delete ή άλλο χαρακτήρα(replace δηλαδή)
=========================================================

iliadis
Δημοσιεύσεις: 24
Εγγραφή: 06 Φεβ 2009 01:10

Japplet networking

Δημοσίευση από iliadis » 21 Ιούλ 2009 18:12

ευχαριστω πολυ φιλε virxen75.
Θα τα δοκιμασω αυτα που λες και θα επανελθω.

Δεν καταλαβα ομως γιατι το insert δεν δουλευει.
το ετρεξα με απλο παραδειγμα σε ενα test προγραμματακι και του ειπα jtextarea1.insert("hello",20) και μου πεταει exception.
Επισης δεν καταλαβα τι εννοεις πως θα χρησιμοποιησουμε το append αν γραφουμε στην μεση του υπαρχοντος κειμενου και οχι στο τελος του.

Άβαταρ μέλους
virxen75
Δημοσιεύσεις: 493
Εγγραφή: 18 Φεβ 2009 00:17
Τοποθεσία: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ

Japplet networking

Δημοσίευση από virxen75 » 22 Ιούλ 2009 00:57

έστω το κάτω κείμενο σε JTextArea


[12345 ]

αν κάνεις insert μετά το 5 που τελειώνει το κείμενο θα πάρεις μήνυμα λάθους
γιατί το insert προϋποθέτει να υπάρχει κείμενο στην θέση που θα το χρησιμοποιήσεις.

αν κάνεις append πάει στο τέλος του κειμένου και προσθέτει ότι θες.

π.χ. αν ήθελες το 12345 ---> 12345 954
θα έκανες append(" 954")
άρα αν θέλεις να βάλεις ένα χαρακτήρα στην θέση 10 και έχεις κείμενο μέχρι το 5
προσθέτεις κενά μέχρι την θέση 9 και μετά τον χαρακτήρα σου.


ακόμα πιο απλά σκέψου το notepad μπορείς να πας τον κέρσορα όπου δεν έχει κείμενο ή κενό?κι εδώ το ίδιο είναι

Απάντηση

Επιστροφή στο “Java”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες