2009-06-27 26 views
42

¿Cómo agrego barras de desplazamiento a un JTextArea?barras de desplazamiento en JTextArea

+3

Si edita su pregunta a uno totalmente nuevo respuestas dejará de tener sentido, escriba un comentario en su lugar (o respóndase si tiene poca credibilidad para escribir comentarios). Hazlo como lo hacen en el ejemplo, funciona. Si no funciona, has hecho algo mal y es imposible decir qué a menos que publiques alguna fuente. – Fredrik

Respuesta

65

Como se menciona en Fredrik his answer, la forma más sencilla de lograr esto es colocar el JTextArea en un JScrollPane. Esto permitirá el desplazamiento del área de visualización del JTextArea.

Sólo por el bien de la integridad, la siguiente es la forma en que podría lograrse:

JTextArea ta = new JTextArea(); 
JScrollPane sp = new JScrollPane(ta); // JTextArea is placed in a JScrollPane. 

Una vez que el JTextArea está incluido en el JScrollPane, la JScrollPane debe añadirse a la zona donde el texto debe ser. En el siguiente ejemplo, se añade el área de texto con las barras de desplazamiento para un JFrame:

JFrame f = new JFrame(); 
f.getContentPane().add(sp); 

Gracias kd304 de mencionar en los comentarios que se debe añadir el JScrollPane al contenedor en lugar de la JTextArea - I cree que es un error común agregar el área de texto al contenedor de destino en lugar del panel de desplazamiento con área de texto.

Los siguientes artículos de The Java Tutorials tiene más detalles:

+1

+ y agregue 'sp' al contenedor/panel en lugar de 'ta' – akarnokd

+0

@ kd304: Correcto, estaba tratando de decidir si debería agregarse o no. Voy a seguir adelante y agregarlo. Gracias por la sugerencia :) – coobird

+1

+1 por proporcionar el código fuente. Era demasiado vago para escribir :-) – Fredrik

13

Primero hay que definir un JTextArea como de costumbre:

public final JTextArea mainConsole = new JTextArea(""); 

Entonces se pone un JScrollPane sobre el TextArea

JScrollPane scrollPane = new JScrollPane(mainConsole); 
scrollPane.setBounds(10,60,780,500); 
scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 

La última línea dice que la barra de desplazamiento vertical siempre estará ahí. Hay un comando similar para horizontal. De lo contrario, la barra de desplazamiento solo se mostrará cuando sea necesario (o nunca, si usa _SCROLLBAR_NEVER). Supongo que es tu llamada la que quieres usar.

También se pueden añadir a la wordwrap JTextArea si quieres: Guide Here

Buena suerte,
Norma M

P. S. Asegúrese de agregar el ScrollPane al JPanel y no agregar el JTextArea.

+0

El enlace parece estar roto. Arreglarlo tal vez? –

3
  txtarea = new JTextArea(); 
    txtarea.setRows(25); 
    txtarea.setColumns(25); 
    txtarea.setWrapStyleWord(true); 
    JScrollPane scroll = new JScrollPane (txtarea); 
    panel2.add(scroll); //Object of Jpanel 

Por encima de líneas dadas muestra de manera automática las dos barras de desplazamiento horizontal, vertical & ..

2

Sólo quería decir gracias a la más alta primer puesto por un usuario a quien creo que se llama "coobird". Soy nuevo en este sitio web de stackoverflow.com, pero no puedo creer lo útil y útil que es esta comunidad ... así que gracias a todos por publicar buenos consejos y consejos para otros. De eso se trata una comunidad.

Ahora coobird correctamente dijo:

Como Fredrik menciona en su respuesta, la forma más sencilla de lograr esto es colocar el JTextArea en un JScrollPane. Esto permitirá el desplazamiento del área de vista de JTextArea.

me gustaría decir:

La declaración anterior es absolutamente cierto. De hecho, había estado luchando con esto en Eclipse usando el plugin de WindowBuilder Pro porque no podía entender qué combinación de widgets me ayudaría a lograrlo. Sin embargo, gracias a la publicación de coobird, pude resolver esta frustración que me llevó días.

También me gustaría agregar que soy relativamente nuevo en Java a pesar de que tengo una base sólida en los principios. Los fragmentos de código y consejos que ustedes dan aquí son tremendamente útiles.

Solo quiero agregar otro tid-bit que pueda ayudar a otros. Noté que Coobird puso un código de la siguiente manera (para mostrar cómo crear un área de texto desplazable). Él escribió:

JTextArea ta = new JTextArea(); 
JScrollPane sp = new JScrollPane(ta); 

Me gustaría decir gracias al fragmento de código de coobird anterior. No lo he probado directamente así, pero estoy seguro de que funcionaría bien. Sin embargo, puede ser útil para algunos que sepan que cuando hice esto usando la herramienta WindowBuilder Pro, obtuve algo más como el siguiente (que creo que es solo una forma ligeramente más "indirecta" para que WindowBuilder logre lo que ver en las dos líneas anteriores Mi código lee un poco como esto:.

JScrollPane scrollPane = new JScrollPane(); 
scrollPane.setBounds(23, 40, 394, 191); 
frame.getContentPane().add(scrollPane); 

JTextArea textArea_1 = new JTextArea(); 
scrollPane.setViewportView(textArea_1);` 

en cuenta que WindowBuilder básicamente crea un JScrollPane llamado panel de desplazamiento (en las tres primeras líneas de código) ... entonces se establece el viewportview por la siguiente línea: scrollPane.setViewportView (textArea_1). Así que, en esencia, esta línea agrega el textArea_1 en mi código (que obviamente es un JTextArea) para agregar a mi JScrollPane ** que es precisamente de lo que Coobird estaba hablando).

Espero que esto sea útil porque no quería que los desarrolladores de WindowBuilder Pro se confundieran pensando que los consejos de Coobird no eran correctos o algo así.

mejores deseos para todos y feliz de codificación :)

1

forma sencilla de añadir JTextArea en JScrollBar con JScrollPan

import javax.swing.*; 
public class ScrollingTextArea 
{ 
    JFrame f; 
    JTextArea ta; 
    JScrollPane scrolltxt; 
public ScrollingTextArea() 
{ 
    // TODO Auto-generated constructor stub 

    f=new JFrame(); 
    f.setLayout(null); 
    f.setVisible(true); 
    f.setSize(500,500); 
    ta=new JTextArea(); 
    ta.setBounds(5,5,100,200); 

    scrolltxt=new JScrollPane(ta); 
    scrolltxt.setBounds(3,3,400,400); 

    f.add(scrolltxt); 

} 

public static void main(String[] args) 
{ 
    new ScrollingTextArea(); 
} 

}

Cuestiones relacionadas