我想在JTextPane中只添加一些工具提示.例如,如果JTextPane中有引用链接文本,我想在该文本中添加工具提示以显示链接.有什么方法可以实现这个功能吗?
我想使用JTextPane构建类似控制台的输出.因此我使用的是等宽字体:
textpane.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 12));
Run Code Online (Sandbox Code Playgroud)
这适用于所有类型的alphanum(如az,0-9等)字符,但当涉及' \ u2588 '(█)等符号时,字体不再是等宽字体.
我忘记了什么吗?或者是不是有一个包含smybols的等宽字体?
我的目标是实现用户写入JTextPane的关键字的蓝色着色.这就是我的代码的样子:
private class DocumentHandler implements DocumentListener {
@Override
public void changedUpdate(DocumentEvent ev) {
}
@Override
public void insertUpdate(DocumentEvent ev) {
highlight();
}
@Override
public void removeUpdate(DocumentEvent ev) {
highlight();
}
private void highlight() {
String code = codePane.getText();
SimpleAttributeSet defSet = new SimpleAttributeSet();
StyleConstants.setForeground(defSet, Color.BLACK);
doc.setCharacterAttributes(0, code.length(), defSet, true);
SimpleAttributeSet set = new SimpleAttributeSet();
StyleConstants.setForeground(set, Color.BLUE);
for (String keyword : keywords) {
Pattern pattern = Pattern.compile(keyword + "(\\[\\])*");
Matcher matcher = pattern.matcher(code);
while (matcher.find()) {
//Just for test
System.out.print("Start index: …Run Code Online (Sandbox Code Playgroud) 我必须为我的大学创建一个java swing项目.一个java文件的编辑器,带有正确的文本突出显示,即java关键字,java注释和普通文本的不同颜色和字体.
帮助我选择java提供的两个样式文本组件JEditorpane 和JTextPane之一,以便我可以完全满足要求.
请告诉我这两者之间的适当差异,在哪种情况下我必须使用其中一种.
我正在尝试超过2天来实现文本编辑器窗口的特定要求...不幸的是到目前为止没有成功:(
目标是获得一个文本编辑器窗口,该窗口将突出显示当前行,就像其他文本编辑器一样.对于当前行,我指的是当前光标/插入符所在的行.
我已经找到了两种不同的方法,但不幸的是我无法采用它们,所以它们按预期工作.
第一种方法是覆盖DefaultHighlighter(http://snippets.dzone.com/posts/show/6688).在第二种方法中,HighlighterPainter将被覆盖(http://www.jroller.com/santhosh/date/20050622).
现在我正在尝试在我的项目中采用第一种方法,但正如我所说,它没有按预期工作.
在这篇文章的最后,我发布了一个小样本应用程序来演示这个问题.
我希望有人能告诉我这里我做错了什么......或者解释为什么根本无法解决这个问题.如何实现线条突出显示的任何替代解决方案也非常感谢!
非常感谢Cheers Preachie
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.Rectangle;
import javax.swing.JFrame;
import javax.swing.JTextPane;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;
import javax.swing.text.DefaultHighlighter;
import javax.swing.text.Highlighter;
import javax.swing.text.JTextComponent;
public class HighlightProblem extends JFrame {
private static final long serialVersionUID = 1L;
private final JTextPane textPane;
private final Highlighter.HighlightPainter cyanPainter;
public HighlightProblem() {
cyanPainter = new DefaultHighlighter.DefaultHighlightPainter(Color.CYAN);
textPane = new JTextPane();
textPane.setPreferredSize(new …Run Code Online (Sandbox Code Playgroud) 我正在使用具有JTextPane的java创建应用程序.我想能够在enter按下键时(或当用户进入下一行时)执行一些代码.我在网上看了一下,没有找到解决方案.使用C#解决这个问题会更好吗?如果没有,我如何在JTextPane的keyTyped()事件中注册Enter键?如果C#是一个不错的选择,我将如何在C#中执行此操作?
这是我认为可行的解决方案......但没有
//Event triggered when a key is typed
private void keyTyped(java.awt.event.KeyEvent evt) {
int key = evt.getKeyCode();
if (key == KeyEvent.VK_ENTER) {
Toolkit.getDefaultToolkit().beep();
System.out.println("ENTER pressed");
}
}
Run Code Online (Sandbox Code Playgroud)
为什么上面的例子不起作用是因为无论我按哪个键,我得到一个0的keyCode.我更喜欢用Java解决这个问题但是C#也可以工作,也许更好.另外,请尝试用示例而不是链接回答问题(除非您确实需要).谢谢!
我有一个JTextPane,我在JTextPane中有一些文本.但是,因为我一直在Pane中使用HTML,所以文本似乎已自动更改为Times New Roman.
我正在尝试将JTextPane中的字体类型设置为GUI的默认字体(当它不是HTML时,JTextPane的字体).但是,我不能只将字体设置为一种字体,因为它与操作系统不同,因此我想找到一种方法来获取默认字体,然后将我拥有的文本更改为默认字体.
为了演示文本在转换时如何交换到Times New Roman,以下代码是我使用的格式.我怎么能改变它来实现我的目标?
import javax.swing.JFrame;
import javax.swing.JTextPane;
public class GUIExample {
public static void main(String[] args) {
JFrame frame = new JFrame("My App");
frame.setSize(300,300);
JTextPane pane = new JTextPane();
pane.setContentType("text/html");
pane.setText("<html><b>This is some text!</b></html>");
frame.add(pane);
frame.setVisible(true);
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
我正在创建一个简单的聊天程序,我想最终显示HTML链接.我现在的问题是我无法将文本显示在我想要的用户名旁边.
我希望用户的名称为粗体,并且文本显示在其旁边,但由于某种原因,非粗体文本显示为居中.
如果我不粗引用户名,它可以正常工作.前两个是我的名字用粗体显示,中间是名称没有粗体,底部显示一个超链接,我希望它看起来像中间两个,但名称加粗.

这是代码,我做错了什么?请注意,我尝试用JEditorPane替换JTextPane,同样的事情发生了.
package com.test;
import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.WindowConstants;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkEvent.EventType;
import javax.swing.event.HyperlinkListener;
import javax.swing.text.BadLocationException;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
import javax.swing.text.html.HTML;
public class JTextPaneTest extends JPanel {
JTextPane pane;
public JTextPaneTest() {
this.setLayout(new BorderLayout());
pane = new JTextPane();
pane.setEditable(false);
pane.setContentType("text/html");
JScrollPane scrollPane = new JScrollPane(pane);
this.add(scrollPane, BorderLayout.CENTER);
pane.addHyperlinkListener(new HyperlinkListener() {
@Override
public void hyperlinkUpdate(HyperlinkEvent e) {
if (e.getEventType() == EventType.ACTIVATED) {
System.out.println(e.getDescription());
}
}
});
}
public …Run Code Online (Sandbox Code Playgroud) 我一直在寻找这个,到目前为止,我能够想出的是如何创建一个样式并将其应用于这样的角色:
StyledDocument doc = (StyledDocument) new DefaultStyledDocument();
JTextPane textpane = new JTextPane(doc);
textpane.setText("Test");
javax.swing.text.Style style = textpane.addStyle("Red", null);
StyleConstants.setForeground(style, Color.RED);
doc.setCharacterAttributes(0, 1, textpane.getStyle("Red"), true);
Run Code Online (Sandbox Code Playgroud)
如果您的文档中只有少量样式并希望按名称存储它们,以便以后可以轻松应用它们,这将非常有用.在我的应用程序中,我希望能够为文本中的每个字符独立设置前景色(仅少数值之一)和背景色(灰度,许多不同的值).为此创建潜在的数百/数千种不同风格似乎是一种巨大的浪费.有没有办法设置这些属性,而不必每次都创建一个新的样式?如果我只需渲染文本会更容易,但我也需要使其可编辑.有没有办法做到这一点JTextPane,还是有另一个提供此功能的swing类?
我正在使用Swing,JEditorPane但它不支持Javascript或某些高级标签<object>等,并且不支持颜色,字体样式大小等.
是否有任何解决方案,以便编辑器窗格可以显示HTML文件,因为它在普通的HTML浏览器中显示?