2012-01-26 2 views
1

가능한 중복 :
Automatically scroll to the bottom of a text area자바에서 textArea에 새로 추가 된 텍스트의 끝에 자동으로 캐럿을 표시하는 방법은 무엇입니까?

내가 TextArea 구성 요소를 가지고있다. 다른 상황에서 나는 그것에 텍스트를 덧붙여 야한다. 나는 새로운 추가 된 텍스트의 끝 부분에 캐럿이 나타나기를 원한다. 그리고 텍스트가 크고, 자동으로 아래로 스크롤하면된다.

textAreaStatus = new WebTextArea(
      "1- Click on the refresh icon to get newest file.\n" + 
        "2- Select destination if needed.\n" + 
        "3- Click download button to start downloading.\n"); 
    textAreaStatus.setBackground(Color.black); 
    textAreaStatus.setCaretPosition(textAreaStatus.getText().length()); 
    textAreaStatus.getCaret().setVisible(true); 
+1

그래서 무엇이 문제입니까? 코드를 실행하면 어떻게됩니까? –

+0

처음에 붙어서 거기에있는 링크 된 기사를 읽은 다음 이해하지 못하는 것을 정확하게 설명하십시오. – kleopatra

+0

'JScrollPane' 컨테이너 안에'textAreaStatus' 컴포넌트를 추가하고'setAutoscrolls (true) '로 후자를 설정하십시오 – ecle

답변

6

이 코드가 도움이되기를 바랍니다. 당신은이

int len = textArea.getDocument().getLength(); 
textArea.setCaretPosition(len); 

을해야하고 아래로 스크롤되도록 길이로, 텍스트를 wraping에 대한 실제보기를 사용 여기

textArea.setLineWrap(true); 

보다는 더 많은 이해에 대한 샘플 프로그램입니다

import java.awt.BorderLayout; 

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JButton; 
import javax.swing.JScrollPane; 
import javax.swing.JTextArea; 

public class CarotPosition extends JFrame 
{ 
    private JPanel panel; 
    private JTextArea textArea; 
    private JScrollPane scrollPane; 
    private JButton button; 

    public CarotPosition() 
    { 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setLocationRelativeTo(null); 

     panel = new JPanel(); 
     panel.setLayout(new BorderLayout()); 

     textArea = new JTextArea(); 
     scrollPane = new JScrollPane(textArea); 
     textArea.setLineWrap(true); 

     button = new JButton("Click to add Text"); 
     button.addActionListener(new ActionListener() 
      { 
       public void actionPerformed(ActionEvent ae) 
       { 
        textArea.append("Some NEW TEXT is here..."); 
        int len = textArea.getDocument().getLength(); 
        textArea.setCaretPosition(len); 
        textArea.requestFocusInWindow(); 
       } 
      }); 

     setContentPane(panel); 
     panel.add(scrollPane, BorderLayout.CENTER); 
     panel.add(button, BorderLayout.PAGE_END); 

     pack(); 
     setVisible(true); 
    } 

    public static void main(String... args) 
    { 
     javax.swing.SwingUtilities.invokeLater(new Runnable() 
      { 
       public void run() 
       { 
        new CarotPosition(); 
       } 
      }); 
    } 
} 

희망은 도움이 될 것입니다.

감사합니다.

+0

유일한 포인트가 SHOW 인 경우'textArea.requestFocusInWindow()'를 추가 할 필요가 없습니다 텍스트 영역의 맨 아래를 사용자에게 보여줍니다. – DSlomer64

+0

@ DSlomer64 :이 줄을 쓰는 동안 다른 JTextField를 사용했을 수 있으므로이 줄에 초점을 맞추기 위해 필자는 그. 커서를 아래로 가져 오는 것과 아무런 관련이 없습니다. –