2010-04-21 10 views
11

Mam problem z przewijaniem JTextArea. Nie jestem pewien, w jaki sposób można zepsuć JScrollPane, ale wydaje się, że mam i po prostu nie widzę. To wszystko jest częścią większego projektu, ale poniższy kod ilustruje sposób tworzenia JTextArea i dodawania go do JScrollPane. Po wpisaniu poza krawędź obszaru tekstu pasek przewijania nie jest wyświetlany. Ustawienie pionowego paska przewijania tak, aby zawsze wyświetlał pasek przewijania, który nic nie robi.Paski przewijania na JTextArea w JScrollPane nie działają

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

Próbowałem ustawienie tekst obszar tekstu lub wierszy i kolumn w konstruktorze, z których żaden nie pracował. Wchodzi mi do głowy. Jakieś pomysły?

Odpowiedz

26

Ustaw preferowany rozmiar panelu przewijania zamiast obszaru tekstowego.

+0

Dziękujemy! Z jakiegoś powodu myślałem, że już próbowałem i nie udało mi się tego zrobić, ale to działało. Twoje zdrowie. – Robert

+0

+1 - albo całkowicie usuń 'setPreferredSize' do obszaru tekstowego, albo jeśli chcesz ustawić rozmiar w ten sposób, ustaw go na' scrollPane' –

+2

Używam edytora Swing Layout w NetBeans 7.3. Aby to działało, musiałem ustawić właściwość PreferredSize dla JTextArea na wartość null. Kiedy to zrobiłem, magicznie pojawił się pionowy pasek przewijania. –

1

Pozostałe mają rację co do wielkości. Tak na marginesie, zastanów się na temat obsługi zdarzenia (EDT):

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

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

użyć tego kodu

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

}