2012-04-16 10 views
20

Wie kann ich die Bildlaufleiste zu meinem Textbereich hinzufügen. Ich habe mit diesem Code versucht, aber es funktioniert nicht.Java: Hinzufügen Bildlauf in den Textbereich

  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); 

Dank

+0

Was passiert, wenn der Text dann die Bereichsgrenze erreichen? – talnicolas

+0

Daten werden einfach verschwinden. – Ravi

+3

Für eine bessere Hilfe, post ein [SSCCE] (http://sscce.org/). –

Antwort

47

Nach der Zugabe von JTextArea in JScrollPane hier:

scroll = new JScrollPane(display); 

Sie brauchen nicht in andere Behälter wieder hinzuzufügen, wie Sie das tun:

middlePanel.add(display); 

Nur entfernen Sie diese letzte Zeile des Codes, und es wird gut funktionieren. Wie folgt aus:

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 ist nur ein weiterer Container, die Scrollbalken um Ihre Komponente, wenn es gebraucht wird und hat auch sein eigenes Layout platziert. Alles, was Sie tun müssen, wenn Sie etwas in eine Rolle wickeln wollen übergeben Sie es nur in JScrollPane Konstruktor:

new JScrollPane(myComponent) 

oder Set-Ansicht wie folgt aus:

JScrollPane pane = new JScrollPane(); 
pane.getViewport().setView (myComponent); 

Zusätzlich:

Hier ist voll funktionierendes Beispiel, da Sie es immer noch nicht funktionierten:

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); 
} 

Und hier ist das, was man bekommt: enter image description here

+0

Noch funktioniert nicht! – Ravi

+0

Hinzugefügt den Code, den Sie verwenden sollten. Vielleicht versuchst du es auch woanders hinzuzufügen? Wenn Sie dies tun, wird JTextArea aus dem Bildlaufbereich entfernt und auf den neuen Platz gesetzt. –

+0

Ich verwende nirgendwo anders. – Ravi

4

Meine naive Annahme war, dass die Größe des Bildlauffensters wird automatisch bestimmt ...

Die einzige Lösung, die wirklich für mich gearbeitet wurde explizit Seeting Grenzen von 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); 
    } 
} 

Vielleicht wird es einige zukünftige Besucher helfen :)

+0

Nur eine kleine Notiz - Scroll-Fenster Größe und Platzierung würde automatisch bestimmt werden, aber nur, wenn Sie dem Container, dem Sie es hinzufügen, Layout hinzufügen. In diesem Beispiel haben Sie das Layout 'null' für den Inhaltsbereich festgelegt: 'getContentPane(). SetLayout (null);' - deshalb müssen Sie die Grenzen manuell angeben. Andernfalls, wenn Sie ein beliebiges Layout festlegen - zum Beispiel "new BorderLayout()" - berechnet und setzt es automatisch Grenzen für Ihren Bildlaufbereich. –

+0

Ab Java 8 funktioniert es. – ATorras

2

Versuchen Sie, diese beiden Zeilen zu Ihrem Code hinzuzufügen. Ich hoffe, dass es funktionieren wird. Er arbeitete für mich :)

display.setLineWrap(true); 
display.setWrapStyleWord(true); 

Bild von Ausgang unter

gezeigt wird

enter image description here