gpt4 book ai didi

java - 如何在 JTextPane 中围绕组件包装文本?

转载 作者:搜寻专家 更新时间:2023-10-31 20:22:04 24 4
gpt4 key购买 nike

我不明白 JTextPane 中的环绕行为。如果我插入一个短文本,然后是一个 JComponent,然后再插入一个短文本,当然,如果框架足够大,我可以在一行中看到插入的内容。但是,如果文本太长以至于需要多行,则组件总是放在新的一行中。

我发现在将组件插入 JTextPane 后,其文本会变长一个字符。那么,如果一个组件被 JTextPane 视为一个角色,为什么它的行为不像一个角色呢?它可能取决于java版本吗?我使用 Java(TM) SE Runtime Environment (build 1.7.0-b147)

下面是我的代码(用 shortText/longText 实例化变量 currentText 以重现上述行为):

import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.text.BadLocationException;
import javax.swing.text.SimpleAttributeSet;

public class Test {
public static void main(String[] args) {
JFrame frame = new JFrame();
JTextPane textPane = new JTextPane();
textPane.setContentType("text/html");

String shortText = "one two three four five six seven";
String longText = "A text component that can be marked up with attributes that are represented graphically. You can find how-to information and examples of using text panes in Using Text Components, a section in The Java Tutorial. This component models paragraphs that are composed of runs of character level attributes. Each paragraph may have a logical style attached to it which contains the default attributes to use if not overridden by attributes set on the paragraph or character run. Components and images may be embedded in the flow of text.";
String currentText = shortText;

try {
// insert text before the component
textPane.getDocument().insertString(textPane.getDocument().getLength(), currentText,
new SimpleAttributeSet());

textPane.setSelectionStart(textPane.getDocument().getLength());
textPane.setSelectionEnd(textPane.getDocument().getLength());

JComboBox component = new JComboBox();
component.setMaximumSize(component.getPreferredSize());
textPane.insertComponent(component);

// insert text after the component
textPane.getDocument().insertString(textPane.getDocument().getLength(), currentText,
new SimpleAttributeSet());

} catch (BadLocationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

textPane.setEditable(false);

frame.add(new JScrollPane(textPane));
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}

最佳答案

由于您设置的内容类型,这种奇怪的行为似乎会发生。尝试删除这一行:

textPane.setContentType ( "text/html" );

然后您会发现一切正常。我不确定为什么会发生这种情况 - 可能是一些渲染错误或只是预期的行为。

附言我不认为在文本 Pane 中使用 Swing 组件(无论是什么原因)是一个不错的选择。但这只是我的意见......

关于java - 如何在 JTextPane 中围绕组件包装文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12140026/

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