Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsWhite Papers
Discussion GroupsFirst AidDatabasesJavaBeansGUIJava 3DVirtual MachineCORBASecurityToolsGeneral
Java DirectoryOpen Source ProjectsSample Book ChaptersUser GroupsWeb Resources
Related Topics
Databases.NETMore Topics ...

Java Forum / General / April 2008

Tip: Looking for answers? Try searching our database.

Search in JTextarea.

Thread view: 
Bumsys@gmail.com - 14 Apr 2008 08:17 GMT
I have dialog with jtextarea and i want to find some data in it. I
need search function. I enter some data into field search and show
place in text where this data is. Do anyone know where such code is in
internet?
Jeff Higgins - 14 Apr 2008 12:21 GMT
Bumsys wrote:
>I have dialog with jtextarea and i want to find some data in it. I
> need search function. I enter some data into field search and show
> place in text where this data is. Do anyone know where such code is in
> internet?

You've not provided enough specific imformation.
What Document model are you using?
What data are you searching for?

To start you could look at the Java API documentation for:
javax.swing.text.Document, and
javax.swing.text.Element
Jeff Higgins - 15 Apr 2008 18:51 GMT
Bumsys wrote:
>I have dialog with jtextarea and i want to find some data in it. I
> need search function. I enter some data into field search and show
> place in text where this data is. Do anyone know where such code is in
> internet?

import java.util.List;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.util.concurrent.*;
import javax.swing.*;
import javax.swing.text.*;

public class TextSearchTest {

 private static class Search
 implements Callable<List<Integer>> {

   private Document document;
   List<Integer> dataOffsets;
   String searchString;

   public Search(Document document, String searchString) {
     this.document = document;
     this.searchString = searchString;
   }

   @Override
   public List<Integer> call() throws Exception {
     search();
     return dataOffsets;
   }

   @SuppressWarnings("boxing")
   private void search() {

     List<Integer> lineOffsets =
       new ArrayList<Integer>();
     dataOffsets =
       new ArrayList<Integer>();
     Element element =
       document.getDefaultRootElement();
     int elementCount =
       element.getElementCount();

     for (int i = 0; i < elementCount; i++) {
       lineOffsets
       .add(element.getElement(i).getStartOffset());
     }
     lineOffsets
     .add(element.getElement(element.getElementCount() - 1)
         .getEndOffset());

     int count = 0;
     int lsOffset;
     int leOffset;

     while (count < (lineOffsets.size() - 1)) {

       lsOffset = lineOffsets.get(count);
       leOffset = lineOffsets.get(count + 1);
       count++;
       Segment seg = new Segment();

       try {
         document.getText(lsOffset, leOffset - lsOffset, seg);
       }
       catch (BadLocationException e) {
         e.printStackTrace();
       }

       String line = seg.toString();
       int mark = 0;

       while ((mark = line.indexOf(searchString, mark)) > -1) {
         dataOffsets.add(lsOffset + mark);
         mark += searchString.length();
       }
     }
   }

   public String getSearchString() {
     return searchString;
   }

 }

 private static class TextSearchPanel
 extends JPanel implements ActionListener {

   private static final long serialVersionUID = 1L;

   private String text =
     "This little line had some data,\n" +
     "And this little line had none.\n" +
     "Chorus:\n" +
     "data data data data";

   JTextField textField;
   JTextArea textArea;

   public TextSearchPanel() {
     super(new GridBagLayout());

     textField = new JTextField(20);
     textArea = new JTextArea(5, 20);

     textField.addActionListener(this);
     textField.setText("data");
     textArea.setEditable(true);
     textArea.setText(text);
     JScrollPane scrollPane =
       new JScrollPane(textArea);

     GridBagConstraints c =
       new GridBagConstraints();
     c.gridwidth = GridBagConstraints.REMAINDER;

     c.fill = GridBagConstraints.HORIZONTAL;
     add(textField, c);

     c.fill = GridBagConstraints.BOTH;
     c.weightx = 1.0;
     c.weighty = 1.0;
     add(scrollPane, c);
   }

   @SuppressWarnings("boxing")
   @Override
   public void actionPerformed(ActionEvent event) {

     Cursor startCursor =
       textArea.getCursor();
     Cursor waitCursor =
       new Cursor(Cursor.WAIT_CURSOR);
     Highlighter highlighter =
       textArea.getHighlighter();
     String searchText =
       textField.getText();
     Search search =
       new Search(textArea.getDocument(), searchText);

     textArea.setEditable(false);
     textArea.setCursor(waitCursor);
     highlighter.removeAllHighlights();

     ExecutorService service =
       Executors.newSingleThreadExecutor();
     Future<List<Integer>> offsets = service.submit(search);

     try {
       for (Integer start : offsets.get()) {
         highlighter.addHighlight(start,
             start + searchText.length(),
             DefaultHighlighter.DefaultPainter);
       }
     }
     catch (Exception e) {}

     textArea.setEditable(true);
     textArea.setCursor(startCursor);
   }
 }

 private static void createAndShowGUI() {

   JFrame frame = new JFrame("TextSearchTest");
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   frame.add(new TextSearchPanel());
   frame.setLocationByPlatform(true);
   frame.pack();
   frame.setVisible(true);
 }

 public static void main(String args[]) {

   EventQueue.invokeLater(new Runnable() {
     public void run() {
       createAndShowGUI();
     }
   });
 }
}


Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.