gpt4 book ai didi

java - JTextPane 自动滚动只能运行一次

转载 作者:行者123 更新时间:2023-12-01 12:49:56 26 4
gpt4 key购买 nike

我有两个 JTextPane 并将它们全部设置为垂直自动滚动,但由于某种原因,我不明白只有一个在工作。

可能是什么原因?

    JTextPane textA = new JTextPane();
textA.setName(text);
textA.setContentType("text/html");
DefaultCaret caret = (DefaultCaret)textA.getCaret();
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
JScrollPane filler = new JScrollPane (textA,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

JTextPane textB = new JTextPane();
textB.setName(text + "_T");
textB.setFont(textA.getFont());
DefaultCaret caret_T = (DefaultCaret)textB.getCaret();
caret_T.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
JScrollPane filler_T = new JScrollPane (textB,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
panel.add(filler); panel.add(filler_T);

filler_T (textB) 是唯一有效的

最佳答案

您的面板尚未使用任何布局。因此 JScrollPane Filler_T 放置在 JScrollPane Filler 之上,因此 JTextPane textA 不可见。

使用布局,例如在代码中添加以下行:

panel.setLayout(new BorderLayout(0, 0));
panel.add(filler,BorderLayout.NORTH);
panel.add(filler_T,BorderLayout.CENTER);

您的窗口将如下所示:

enter image description here

完整运行代码:

import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.border.EmptyBorder;
import javax.swing.text.DefaultCaret;

public class TestScroll extends JFrame {

private JPanel panel;


public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
TestScroll frame = new TestScroll();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}


public TestScroll() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panel = new JPanel();
panel.setBorder(new EmptyBorder(5, 5, 5, 5));
panel.setLayout(new BorderLayout(0, 0));
setContentPane(panel);



JTextPane textA = new JTextPane();
textA.setName("text");
textA.setContentType("text/html");
DefaultCaret caret = (DefaultCaret)textA.getCaret();
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
JScrollPane filler = new JScrollPane (textA,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

JTextPane textB = new JTextPane();
textB.setName("text" + "_T");
textB.setFont(textA.getFont());
DefaultCaret caret_T = (DefaultCaret)textB.getCaret();
caret_T.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
JScrollPane filler_T = new JScrollPane (textB,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
panel.add(filler,BorderLayout.NORTH);
panel.add(filler_T,BorderLayout.CENTER);

pack();

}

}

为了更好地理解,请阅读 LayoutManagers

关于java - JTextPane 自动滚动只能运行一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24303923/

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