我有一个 JTextPane (或 JEditorPane,我可以使用任何一个都没有问题)。如何将选定区域的字体更改为特定字体?
textpane.getSelectedText().setFont()行不通的。(即使使用字体系列)
我在尝试将 JButton 添加到带有字符串的 JTextPane 时遇到问题。所以我想要做的是在 for 循环中添加每个字符串,然后在添加的字符串之后添加广告 JButton。下面的代码是我想要完成的。
ArrayLst<String> data = new ArrayList();
data.add("Data here");
data.add("Data here 2");
data.add("Data here 3");
data.add("Data here 4");
Container cp = getContentPane();
JTextPane pane = new JTextPane();
SimpleAttributeSet set = new SimpleAttributeSet();
StyleConstants.setBold(set, true);
pane.setBackground(Color.BLUE);
pane.setEditable(false);
Document doc = pane.getStyledDocument();
for(int i=0; i<data.size(); i++)
{
doc.insertString(doc.getLength(), data.get(i)+ "\n", set);
pane.insertComponent(new JButton("View Info"));
}
Run Code Online (Sandbox Code Playgroud)
谁能告诉我如何将 JButton 添加到同一行上的每个字符串?
非常感谢
最近我一直在做一个Java文本编辑器项目,我想用aJTextPane代替旧的JTextArea以实现语法高亮。但是, aJTextPane中缺少方法JTextArea(例如append()等getLineStartOffset()),我想在我的类MyTextPane( 的子类JTextPane)中重新实现它们,但遇到了麻烦。
我当前的代码(只有一小部分独立部分):
import java.awt.*;
import javax.swing.*;
import javax.swing.text.*;
public class MyTextPane extends JTextPane
{
public MyTextPane()
{
super();
}
public void append(String text)
{
try
{
Document doc = this.getDocument();
doc.insertString(doc.getLength(),text,null);
}
catch (BadLocationException ex)
{
//must succeed
throw new InternalError(ex.getMessage());
}
}
public void insert(String text, int pos)
{
try
{
this.getStyledDocument().insertString(pos,text,null);
}
catch (BadLocationException ex)
{
throw new IllegalArgumentException(ex);
} …Run Code Online (Sandbox Code Playgroud) 我想使用 JTextArea 或 JTextPane 作为代码更改播放器,并将代码更改和插入符号移动记录在文本文件中。但问题是,它是从支持多选的编辑器中记录的,因此一次会有多个插入符位置。
是否可以在 JTextArea 或 JTextPane 中显示多个插入符?
我尝试使用 JTextPane 并将代码呈现为 HTML,并<span class='caret'>|</span>在代码中插入一些来表示插入符号,它可以工作,但假插入符号占用空间,因此当插入符号更改时,正常字符不会固定在屏幕上。
我正在使用JTextPane来编辑HTML.当我在GUI组件中输入换行符并在JTextPane上调用getText()时,我得到一个带换行符的字符串.如果我然后创建一个新的JTextPane并传入相同的文本,则忽略换行符.
为什么在输入换行符时JTextPane不插入<br>标签?这有一个很好的解决方法吗?
JTextPane test = new JTextPane();
test.setPreferredSize(new Dimension(300, 300));
test.setContentType("text/html");
test.setText("Try entering some newline characters.");
JOptionPane.showMessageDialog(null, test);
String testText = test.getText();
System.out.println("Got text: " + testText);
// try again
test.setText(testText);
JOptionPane.showMessageDialog(null, test);
testText = test.getText();
System.out.println("Got text: " + testText);
Run Code Online (Sandbox Code Playgroud)
样本输出:
<html>
<head>
</head>
<body>
Try entering some newline characters.
What gives?
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我意识到我可以在调用setText之前将换行符转换为HTML换行符,但这也会在HTML和BODY标记之后转换换行符,并且看起来很愚蠢.
如何将背景图像设置为JTextPane - 某种水印.
我尝试了这个选项 - 创建一个JTextPane的子类,并使用paint方法绘制图像.但随后文本显示在图像"下方"而不是上方.
有没有"标准"或"众所周知"的方法来做到这一点?
(顺便说一下,我尝试过(傻傻的东西?)使内容类型为"text/html",并将图像设置为a的背景图像,<div>但它没有帮助.)
我的窗口上有JTextPane,我有JTextField。当我在JTextField中按Enter键时,文本将添加到JTextPane中。一切正常,滚动条也单独显示。但是,它显示不正确。它会自动滚动到JTextPane中内容的开头。如何将滚动条保持在JTextPane的末尾?
我需要在JTextPane中修改字母间距(字体跟踪),我无法让它工作.
当我使用JTextArea时,我可以这样做:
Font font = new Font("Courier New", Font.PLAIN, 10);
HashMap <TextAttribute, Object> attrs = new HashMap<TextAttribute, Object>();
attrs.put(TextAttribute.TRACKING, -0.1);
font = font.deriveFont(attrs);
textArea.setFont(font);
Run Code Online (Sandbox Code Playgroud)
但由于我需要更改行间距,我需要使用JTextPane,并执行:
textPane.setFont(font)
Run Code Online (Sandbox Code Playgroud)
正如我在JTextArea中所做的那样不起作用.我试过的另一件事是:
MutableAttributeSet set = new SimpleAttributeSet();
StyleConstants.setLineSpacing(set, -0.2);
StyleConstants.setFontFamily(set,"Courier New");
StyleConstants.setFontSize(set, 10);
set.addAttribute(TextAttribute.TRACKING, -0.1);
ta.setParagraphAttributes(set, true);
Run Code Online (Sandbox Code Playgroud)
但跟踪属性不起作用.
我究竟做错了什么?
我得到的Document对象JTextPane,包含方法remove,但具体的字符数textPane.getDocument().remove(begin,end).我想删除整个第一行.
我正在使用Netbeans 7.1.在jtextpane中有没有显示行号的选项?