|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Nov 2010
Messaggi: 17
|
[Java] aiuto su funzione trova / trova successivo
Salve,
E da molto che per mancanza di tempo non scrivo su questo forum, cmq, scrivo perché ho un problema in un mio progetto. Sto provando a fare creare la funzione trova successivo quella presente negli editor, avete presente? per verificare il corretto funzionamento, senza nessun altro codice che non serviva allo scopo, ho creato un'altro progetto, con questo sorgente: Codice:
import javax.swing.*; import java.awt.*; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; class GUI extends JFrame { private JTextField textField = null; private JTextPane textPane = null; private JButton button = null; private int index = -1; public GUI() { setLayout(new BorderLayout()); setVisible(true); JPanel topPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); textField = new JTextField(15); button = new JButton("Trova / trova successivo"); textPane = new JTextPane(); topPanel.add(textField); topPanel.add(button); add(topPanel, BorderLayout.NORTH); add(textPane, BorderLayout.CENTER); button.addMouseListener(new MouseListener() { @Override public void mouseClicked(MouseEvent arg0) { String originText = textPane.getText(); String findWord = textField.getText(); if (index != -1) { index = originText.indexOf(findWord, index + findWord.length()); }else { index = originText.indexOf(findWord); } if (index == -1) { JOptionPane.showMessageDialog(null, "Nessuna occorrenza trovata"); }else { textPane.grabFocus(); textPane.select(index, index + findWord.length()); JOptionPane.showMessageDialog(null, "Elemento trovato\n\nStart selection = " + index); } } @Override public void mouseEntered(MouseEvent arg0) { // TODO Auto-generated method stub } @Override public void mouseExited(MouseEvent arg0) { // TODO Auto-generated method stub } @Override public void mousePressed(MouseEvent arg0) { // TODO Auto-generated method stub } @Override public void mouseReleased(MouseEvent arg0) { // TODO Auto-generated method stub } }); } } public class es1 { public static void main(String[] args) { new GUI(); } } Ora, il problema è che: la parola trovata mi viene effettivamente evidenziata correttamente, il problema è, che quando la parola da trovare si trova oltre la prima riga me la trova, ma sottolineandomi altro ( ad esempio saltando la prima lettero, o saltando la prima lettera e evidenziando anche il caratteri successivo ) insomma mi evidenzia male, se volete potete eseguire il codice per verificare il problema. Ho pensato, forse è un problema causato dal carattere ritorno a capo? o pensato, potrei eseguire la funzione per ogni riga, ma non saprei, c'è un'altro modo per risolvere? |
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: Oct 2009
Messaggi: 41
|
Ciao, la tua intuizione non è sbagliata. Infatti il problema è causato proprio del carattere '\n', ovvero il ritorno a capo. Quando effettui la ricerca dell'indice nella stringa con il metodo indexof(..), elabori la stringa a basso livello diciamo, conteggiando tutti i caratteri e di conseguenza anche quelli di spazio e riporto a capo. Nella selezione nella JTextPane invece la cosa avviene ad alto livello e quindi il ritorno non viene conteggiato.
Ti mostro una soluzione rapida anche se non proprio efficiente: @Override public void mouseClicked(MouseEvent arg0) { In questo modo elimini i ritorno a capo dalla stringa alla ricerca dell'indice.String originText = textPane.getText().replace("\n", ""); Fammi sapere se ti va |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:50.