Java Swing - Sử dụng JScrollPane và để nó cuộn trở lại đầu trang


82

Tôi đang sử dụng JScrollPane để cho phép cuộn trong JFrame có thành phần văn bản đóng vai trò là trình soạn thảo văn bản. Những gì tôi muốn làm, sau khi thiết lập văn bản trong trình chỉnh sửa này, là để nó cuộn ngược lên trên cùng, để bạn có thể xem nội dung ở đầu tệp.

Có ai biết cách để làm điều này không?

java  swing 

Câu trả lời:


137

Gọi setCaretPosition (0) trên thành phần văn bản của bạn sẽ khiến nó cuộn lên đầu.


Bạn nói đúng, vấn đề là dấu mũ ở cuối thành phần văn bản. Nó cũng hoạt động sau khi gọi 'setText (...)' trên trình soạn thảo văn bản. (được thử nghiệm với một phiên bản JEditorPane dưới dạng bảng điều khiển văn bản bên trong JScrollPane).
Guillaume

36

Chỉ trong trường hợp bạn không sử dụng thành phần văn bản, hãy xem chuỗi được đăng ở đây .... Thiết lập Thanh cuộn trên JScrollPane

Giải pháp của họ là quay ra một chuỗi thông qua invokeLater

final JScrollPane scroll = new JScrollPane(text);
javax.swing.SwingUtilities.invokeLater(new Runnable() {
   public void run() { 
       scroll.getVerticalScrollBar().setValue(0);
   }
});

1
Đây là câu trả lời gần nhất cho câu hỏi của tôi .. stackoverflow.com/questions/42961012/… Tuy nhiên, làm thế nào có thể sử dụng phương pháp này nếu có bảng điều khiển bên trong JScrollPane?
In-young Choung

3
invokeLaterkhông tạo ra một chuỗi, nó chỉ xếp hàng đợi một sự kiện sẽ được thực thi sau khi sự kiện hiện tại (ví dụ: nhấp vào nút hoặc bất cứ điều gì là ngữ cảnh của mã gọi invokeLater) và bất kỳ sự kiện nào đã được xếp sẵn khác kết thúc.
Radiodef

10

Điều này sẽ làm cho công việc:

DefaultCaret caret = (DefaultCaret) textArea.getCaret();
caret.setUpdatePolicy(DefaultCaret.NEVER_UPDATE);

9

Bạn có thể sử dụng phương pháp này setCaretPosition(0)ngay sau setText(String t)thành phần văn bản của mình.


1
Bản sao câu trả lời trước đó của @ Craig.
Karl Richter


7

Bạn có thể thử điều này:

 scrollPane.getViewport().setViewPosition(new Point(0,0));

Theo JavaDocs setViewPosition () hoạt động như thế này:

Đặt tọa độ chế độ xem xuất hiện ở góc trên bên trái của chế độ xem, không thực hiện gì nếu không có chế độ xem.


4
Điều này không hiệu quả với tôi - ScrollPane nhảy lên trên cùng rồi ngay lập tức lại hạ xuống dưới cùng.
jwoolard

Nó hoạt động với tôi ¯ \ _ (ツ) _ / ¯ Tôi có một JTable bên trong JScrollPane của mình.
mikato

@jwoolard Có, giải pháp được trình bày ở đây không hoạt động trong một số trường hợp tôi gặp phải. NHƯNG, hãy ghi lại giải pháp tôi đã đưa ra sáng nay.
Richard T

2

Đây là cách thực hiện:

textArea.setSelectionStart(0);
textArea.setSelectionEnd(0); 
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.