quitar - Java: agregar desplazamiento en el área de texto
jtextarea scroll (3)
Después de agregar JTextArea en JScrollPane aquí:
scroll = new JScrollPane(display);
No necesita agregarlo nuevamente en otro contenedor como lo hace:
middlePanel.add(display);
Solo elimine esa última línea de código y funcionará bien. Me gusta esto:
middlePanel=new JPanel();
middlePanel.setBorder(new TitledBorder(new EtchedBorder(), "Display Area"));
// create the middle panel components
display = new JTextArea(16, 58);
display.setEditable(false); // set textArea non-editable
scroll = new JScrollPane(display);
scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
//Add Textarea in to middle panel
middlePanel.add(scroll);
JScrollPane es simplemente otro contenedor que coloca barras de desplazamiento alrededor de su componente cuando es necesario y también tiene su propio diseño. Todo lo que necesita hacer cuando desea envolver cualquier elemento en un desplazamiento simplemente páselo al constructor JScrollPane:
new JScrollPane( myComponent )
o establecer una vista como esta:
JScrollPane pane = new JScrollPane ();
pane.getViewport ().setView ( myComponent );
Adicional:
Aquí está el ejemplo completamente funcional ya que aún no lo conseguiste funcionando:
public static void main ( String[] args )
{
JPanel middlePanel = new JPanel ();
middlePanel.setBorder ( new TitledBorder ( new EtchedBorder (), "Display Area" ) );
// create the middle panel components
JTextArea display = new JTextArea ( 16, 58 );
display.setEditable ( false ); // set textArea non-editable
JScrollPane scroll = new JScrollPane ( display );
scroll.setVerticalScrollBarPolicy ( ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS );
//Add Textarea in to middle panel
middlePanel.add ( scroll );
// My code
JFrame frame = new JFrame ();
frame.add ( middlePanel );
frame.pack ();
frame.setLocationRelativeTo ( null );
frame.setVisible ( true );
}
Y esto es lo que obtienes:
¿Cómo puedo agregar la barra de desplazamiento a mi área de texto? He intentado con este código pero no está funcionando.
middlePanel=new JPanel();
middlePanel.setBorder(new TitledBorder(new EtchedBorder(), "Display Area"));
// create the middle panel components
display = new JTextArea(16, 58);
display.setEditable(false); // set textArea non-editable
scroll = new JScrollPane(display);
scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
//Add Textarea in to middle panel
middlePanel.add(scroll);
middlePanel.add(display);
Gracias
Mi suposición ingenua era que el tamaño del panel de desplazamiento se determinará automáticamente ...
La única solución que realmente funcionó para mí fue explotar explícitamente los límites de JScrollPane :
import javax.swing.*;
public class MyFrame extends JFrame {
public MyFrame()
{
setBounds(100, 100, 491, 310);
getContentPane().setLayout(null);
JTextArea textField = new JTextArea();
textField.setEditable(false);
String str = "";
for (int i = 0; i < 50; ++i)
str += "Some text/n";
textField.setText(str);
JScrollPane scroll = new JScrollPane(textField);
scroll.setBounds(10, 11, 455, 249); // <-- THIS
getContentPane().add(scroll);
setLocationRelativeTo ( null );
}
}
Tal vez ayudará a algunos futuros visitantes :)