Java - Un applet revoltoso.

 
Vista:

Un applet revoltoso.

Publicado por Daniel (10 intervenciones) el 05/08/2007 18:03:52
El siguiente código es un applet que muestra un textarea con un texto por defecto, y un botón. El usuario puede seleccionar una parte del texto del textarea, y teniéndola seleccionada, al pulsar sobre el botón, se sustituirá el texto seleccionado por la frase "Hola desde java". La cosa funciona cuando selecciono parte del texto por defecto, pero si añado texto extra al textarea (cuando se está ejecutando el applet), y selecciono una parte de este texto, entonces hace el reemplazo anormalmente. El resultado no es el deseado. Espero puedan ayudarme:

import java.awt.*;
import java.applet.*;
import java.awt.event.*;

public class AREADETEXTO1 extends Applet implements ActionListener {

TextArea areaTexto;
Button boton;

public void init() {
areaTexto = new TextArea("Ya es la hora.",5,20,TextArea.SCROLLBARS_BOTH);
add(areaTexto);
boton = new Button("Haga clic aquí");
add(boton);
boton.addActionListener(this);
}

public void actionPerformed(ActionEvent e) {
if (e.getSource() == boton) {
areaTexto.replaceRange("Hola desde Java",areaTexto.getSelectionStart(),areaTexto.getSelectionEnd());
}
}
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Mejor explicado

Publicado por Daniel (10 intervenciones) el 06/08/2007 11:31:03
Como el foro no me permite editar el post anterior, hago este nuevo post explicando mejor el problema:

El siguiente código es un applet que muestra un textarea con un texto por defecto, y un botón. El usuario puede seleccionar una parte del texto del textarea, y teniéndola seleccionada, al pulsar sobre el botón, se sustituirá el texto seleccionado por la frase "Hola desde java". La cosa funciona cuando selecciono parte del texto por defecto. También funciona cuando añado texto extra en la misma línea que el texto por defecto. Pero si añado texto extra en una nueva línea del textarea (cuando se está ejecutando el applet), y selecciono una parte de este texto, entonces hace el reemplazo anormalmente. El resultado no es el deseado. Espero puedan ayudarme:

import java.awt.*;
import java.applet.*;
import java.awt.event.*;

public class AREADETEXTO1 extends Applet implements ActionListener {

TextArea areaTexto;
Button boton;

public void init() {
areaTexto = new TextArea("Ya es la hora.",5,20,TextArea.SCROLLBARS_BOTH);
add(areaTexto);
boton = new Button("Haga clic aquí");
add(boton);
boton.addActionListener(this);
}

public void actionPerformed(ActionEvent e) {
if (e.getSource() == boton) {
areaTexto.replaceRange("Hola desde Java",areaTexto.getSelectionStart(),areaTexto.getS electionEnd());
}
}
}

Éso mismo me ocurre con un applet que selecciona texto. Cuando el texto está en una nueva línea, no lo selecciona bien. Supongo que tendrá algo que ver con el carácter de nueva línea, aunque no tengo ni idea en realidad:

import java.awt.*;
import java.applet.*;
import java.awt.event.*;

public class AREADETEXTO2 extends Applet implements ActionListener {

TextArea areaTexto;
Button boton;

public void init() {
areaTexto = new TextArea("Ya es la hora.",5,20,TextArea.SCROLLBARS_BOTH);
add(areaTexto);
boton = new Button("Haga clic aquí");
add(boton);
boton.addActionListener(this);
}

public void actionPerformed(ActionEvent e) {
if (e.getSource() == boton) {
String texto = areaTexto.getText();
String cadena = new String("hora");
int posicion = texto.indexOf(cadena);
areaTexto.select(posicion,posicion+cadena.length() );
}
}

}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Mejor explicado

Publicado por angel (537 intervenciones) el 06/08/2007 11:54:47
Hola, yo he probado en JTextArea a sustituir texto y funciona con cualquiera d estas 2 sentencias:

jTextArea1.replaceRange("Reeemplazado",jTextArea1.getSelectionStart(),jTextArea1.getSelectionEnd());
jTextArea1.replaceSelection("Reeeemplazado");

Estas sentencias las tengo dentro d un metodo que se ejecuta al pulsar un boton.

He probado tanto a sustituir el texto original como añadido mas tarde y tmb seleccionado varias lineas

Saludos..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No se ve el contorno ni las barras.

Publicado por Daniel (10 intervenciones) el 07/08/2007 10:55:39
Gracias, me ha servido de gran ayuda tu post, porque ahora parece que sí hace bien el reemplazo. El problema ahora es que no se ve el contorno del JTextArea, ni tampoco sus barras de desplazamiento. ¿Cómo hacerlos visibles?:

import java.applet.*;
import javax.swing.*;
import java.awt.event.*;

public class REEMPLAZOJTEXTAREA extends Applet implements ActionListener {

JTextArea areaTexto;
JButton boton;

public void init() {
areaTexto = new JTextArea("Ya es la hora",5,20);
boton = new JButton("Haga clic aquí");

add(areaTexto);
add(boton);

boton.addActionListener(this);
}

public void actionPerformed(ActionEvent e) {

if (e.getSource() == boton) {
areaTexto.replaceRange("Hola desde java",areaTexto.getSelectionStart(),areaTexto.getSelectionEnd());
}
}

}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:No se ve el contorno ni las barras.

Publicado por angel (537 intervenciones) el 07/08/2007 11:30:01
Ahora no recuerdo como exactamente, prueba con los metodos setBorder y setAutoscrolls

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:No se ve el contorno ni las barras.

Publicado por Daniel (10 intervenciones) el 07/08/2007 12:56:29
Gracias, pensé que al igual que el textarea, debía haber un constructor que indicase los scrollbars, tanto lo pensé, que no me fijé en los métodos. De todas formas, esos métodos a mí no me han funcionado. Pongo el código que me ha funcionado. En este caso, pongo las barras de desplazamiento y un borde externo. Lo normal sería, en el caso de haber barras, quitar el borde, en caso contrario, poner el borde, puesto que las barras ya implican un borde:

import java.awt.*;
import java.applet.*;
import javax.swing.*;
import javax.swing.border.*;
import java.awt.event.*;

public class REEMPLAZOJTEXTAREA extends Applet implements ActionListener {

JTextArea areaTexto;
JButton boton;
JScrollPane barras;
JPanel panel;
Border borde;

public void init() {

areaTexto = new JTextArea("Ya es la hora",5,20);
boton = new JButton("Haga clic aquí");
barras = new JScrollPane(areaTexto, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
panel = new JPanel();
borde = BorderFactory.createLineBorder(Color.black);

panel.setBorder(borde);

panel.add(barras);

add(panel);
add(boton);

boton.addActionListener(this);
}

public void actionPerformed(ActionEvent e) {

if (e.getSource() == boton) {
areaTexto.replaceRange("Hola desde java",areaTexto.getSelectionStart(),areaTexto.getSelectionEnd());
}
}

}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar