gpt4 book ai didi

java - 无法在滚动 Pane 上滚动 - Java Swing

转载 作者:行者123 更新时间:2023-12-02 04:06:23 26 4
gpt4 key购买 nike

我有一个 Swing 应用程序,一旦字符串传递到 GUI,它就会用字符串更新 Textarea 的内容。

我在文本区域中实时更新了字符串,但我现在面临的问题是我无法在进程仍在运行时滚动文本区域。

任何人都知道这里发生了什么或有解决方案

尝试 1 -

public static void appendToJTextArea(String message){
String currentText = GUI.textLogArea.getText();
String newString = message;
String newTextToAppend = currentText + "\n" + newString;
GUI.textLogArea.setText(newTextToAppend);
GUI.frame.update(GUI.frame.getGraphics());
}

尝试 2 -

    public static void appendToJTextArea(String message){
Runnable runnable = new LogThread(message);
Thread thread = new Thread(runnable);
thread.start();

/**
String currentText = GUI.textLogArea.getText();
String newString = message;
String newTextToAppend = currentText + "\n" + newString;
GUI.textLogArea.setText(newTextToAppend);
GUI.frame.update(GUI.frame.getGraphics());
**/
}
}

class LogThread implements Runnable {
private String test;

public LogThread(String message){
test = message;
}
public void run() {
update(test);
}

private void update(String message) {
System.out.println("BBB"+GUI.textLogArea.getText());
System.out.println("AAA"+message);

String currentText = GUI.textLogArea.getText();
String newString = message;
String newTextToAppend = currentText + "\n" + newString;
GUI.textLogArea.append(newTextToAppend);
}

带有滚动 Pane 的 GUI 类

JPanel panel_1 = new JPanel();
panel_1.setBounds(361, 40, 390, 305);
contentPane.add(panel_1);
panel_1.setLayout(null);

JLabel lblScraperLogs = new JLabel("Scraper Logs");
lblScraperLogs.setBounds(0, 0, 390, 31);
lblScraperLogs.setFont(new Font("Cooper Black", Font.PLAIN, 13));
lblScraperLogs.setHorizontalAlignment(SwingConstants.CENTER);
panel_1.add(lblScraperLogs);

textLogArea = new JTextArea();
textLogArea.setEditable(false);
textLogArea.setBounds(10, 23, 380, 282);

JScrollPane scroll = new JScrollPane(textLogArea);
scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
scroll.setBounds(10, 23, 380, 282);
panel_1.add(scroll);

最佳答案

but the problem im now facing is I am unable to scroll the the textarea while the process is still running

听起来您的长时间运行的进程正在事件调度线程(EDT)上执行。该线程负责绘制 GUI,因此在进程执行完毕之前 GUI 无法重新绘制自身。不要在 EDT 上运行您的代码。

相反,需要为长时间运行的进程创建一个单独的线程。也许使用 SwingWorker 来创建一个单独的线程并允许您在数据可用时“发布”数据。阅读 Swing 教程中关于 Concurrency 的部分有关 EDT 和 SwingWorker 的更多信息。

关于java - 无法在滚动 Pane 上滚动 - Java Swing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34241850/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com