Comment puis-je ajouter la barre de défilement à ma zone de texte. j'ai essayé avec ce code mais cela ne fonctionne pas.
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);
Merci
Après avoir ajouté JTextArea dans JScrollPane ici:
scroll = new JScrollPane(display);
Vous n'avez pas besoin de l'ajouter à nouveau dans un autre conteneur comme vous le faites:
middlePanel.add(display);
Supprimez simplement cette dernière ligne de code et cela fonctionnera bien. Comme ça:
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 est juste un autre conteneur qui place des barres de défilement autour de votre composant lorsque cela est nécessaire et a également sa propre disposition. Tout ce que vous devez faire lorsque vous voulez envelopper quelque chose dans un parchemin suffit de le passer dans le constructeur JScrollPane:
new JScrollPane( myComponent )
ou définir la vue comme ceci:
JScrollPane pane = new JScrollPane ();
pane.getViewport ().setView ( myComponent );
Supplémentaire:
Voici un exemple pleinement fonctionnel puisque vous ne l'avez toujours pas fait fonctionner:
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 );
}
Et voici ce que vous obtenez:
Mon hypothèse naïve était que la taille du volet de défilement sera déterminée automatiquement ...
La seule solution qui a réellement fonctionné pour moi était en supprimant explicitement les limites 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 );
}
}
Peut-être que cela aidera certains futurs visiteurs :)