2010-04-21 22 views
11

Tengo problemas para desplazar un JTextArea. No estoy seguro de cómo puedes estropear un JScrollPane, pero parece que sí y no puedo verlo. Todo es parte de un proyecto más grande, pero el siguiente código es cómo estoy creando un JTextArea y añadiéndolo a un JScrollPane. Cuando escribe más allá del borde del área de texto, la barra de desplazamiento no aparece. Establecer la barra de desplazamiento vertical a siempre activada da una barra de desplazamiento que no hace nada.Las barras de desplazamiento en JTextArea en un JScrollPane no funcionan

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

public class TextAreaTest extends JFrame{ 

    public TextAreaTest() { 
    super("Text Area Scroller"); 

    Container c = getContentPane(); 

    JTextArea textarea = new JTextArea(); 
    textarea.setPreferredSize(new Dimension(300, 50)); 
    textarea.setLineWrap(true); 
    textarea.setText("xx\nxx\nxx\nxx\nxx\nxx\nxx\nxx\nxx\nxx\nxx\nxx\nxx\nxx\n"); 

    JScrollPane scroller = new JScrollPane(textarea); 

    c.add(scroller, BorderLayout.CENTER); 
    pack(); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 

    public static void main(String args[]){ 
    TextAreaTest instance = new TextAreaTest(); 
    instance.setVisible(true); 
    } 
} 

He intentado configurar el texto del área de texto, o filas y columnas, en el constructor, ninguno de los cuales funcionó. Está haciendo mi cabeza. ¿Alguna idea?

Respuesta

26

Establezca el tamaño preferido del panel de desplazamiento en lugar del área de texto.

+0

Gracias! Por alguna razón, pensé que ya lo había intentado y no lo hice pero funcionó. Aclamaciones. – Robert

+0

+1 - elimine 'setPreferredSize' del área de texto o si desea establecer el tamaño de esa manera, configúrelo en' scrollPane' –

+2

Estoy usando Swing Layout Editor en NetBeans 7.3. Para que esto funcione, tuve que establecer la propiedad PreferredSize para que JTextArea sea nulo. Cuando lo hice, la barra de desplazamiento vertical apareció mágicamente. –

1

Los otros tienen razón sobre el tamaño. Como acotación al margen, considere comenzar en el hilo de despacho de eventos (EDT):

public static void main(String args[]) { 
    EventQueue.invokeLater(new Runnable() { 

     @Override 
     public void run() { 
      new TextAreaTest().setVisible(true); 
     } 
    }); 
} 
-1

Usar este código

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