Tôi đã gặp sự cố tương tự với đơn đăng ký của mình. Tôi đã có một "Run" nút ứng dụng của tôi đã thực hiện một số hành động và xuất kết quả cho một JTextArea. Tôi đã phải gọi phương thức từ một Thread. Đây là những gì tôi đã làm.
Tôi có một số nút thao tác trên radio có thể thực hiện và sau đó một nút "Chạy" để thực hiện tác vụ cụ thể đó. Tôi có một hành động được gọi là Xác thực. Vì vậy, khi tôi kiểm tra nút radio đó và nhấp vào nút "Chạy", nó gọi phương thức xác thực(). Vì vậy, lần đầu tiên tôi đặt phương pháp này thành một lớp bên trong mà thực hiện Runnable
class ValidateThread implements Runnable {
public void run() {
validate();
}
}
sau đó tôi gọi là chủ đề này trong ActionListener của nút "Run" như vậy
runButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
// Some code checked on some radio buttons
if(radioButton.isSelected()) {
if(radioButton.getText().equals("VALIDATE")) {
Runnable runnable = new ValidateThread();
Thread thread = new Thread(runnable);
thread.start();
}
}
}
});
Voila! Đầu ra hiện được gửi đến JTextArea.
Bây giờ, bạn sẽ nhận thấy rằng JTextArea sẽ không cuộn xuống với văn bản. Vì vậy, bạn cần phải đặt vị trí dấu mũ như
textArea.setCaretPosition(textArea.getText().length() - 1);
Bây giờ khi dữ liệu được thêm vào JTextArea, nó sẽ luôn cuộn xuống.
Tại sao không sử dụng EventQueue.invokeLater (runnable)? –
Tôi không chắc chắn rằng đã có sẵn - bình luận của bạn là 4 năm sau khi tôi lol – Ascalonian