当前位置:编程学习 > JAVA >>

jtextpane 怎么实现动态给文本中字体着色

jtextpane  看了网上给出的例子都是给个固定的字符,就对这个字符改变颜色。
我想要的是像Editplus那样的查找字符功能,当找到时就将其高亮显示出来。
原来我是用JtextArea组件的,可是当调用其select(begin,end)方法却没有反应、、
所以换成jtextpane  ,可以给个例子或实现步骤吗??求大虾们帮忙、、、 --------------------编程问答--------------------
 try {
          jTextPane1.getHighlighter().addHighlight(0, jTextPane1.getText().length(), DefaultHighlighter.DefaultPainter);
        } catch (BadLocationException ble) {
    
        }
--------------------编程问答-------------------- 高亮第一个
String selected = "test";
    int start = 0;
    int end = 0;

    if (jTextPane1.getText().contains(selected)) {
        start = jTextPane1.getText().indexOf(selected);
        end = start + selected.length();
    }

    try {
        jTextPane1.getHighlighter().removeAllHighlights();
        jTextPane1.getHighlighter().addHighlight(start, end, DefaultHighlighter.DefaultPainter);
    } catch (BadLocationException ble) {
    }

高亮所有
String selected = "test";
    int offset = 0;
    jTextPane1.getHighlighter().removeAllHighlights();
    String text = jTextPane1.getText().replace("\n", "");
    while (text.indexOf(selected, offset) >= 0) {
        int start = 0;
        int end = 0;
        start = text.indexOf(selected, offset);
        end = start + selected.length();
        offset = end-1;
        try {
            System.out.println(start);
            jTextPane1.getHighlighter().addHighlight(start, end, DefaultHighlighter.DefaultPainter);
        } catch (BadLocationException ble) {
        }
    }
--------------------编程问答--------------------


// //////////////////////////////////////////////////////////////////////////////////////
class EleventhPanel extends JPanel {
    PrimaryFrame primaryFrame;
    private SimpleAttributeSet attribute;
    private JTextPane jTextPane;
    private StyledDocument styledDocument;
    Pattern pt = Pattern.compile("int");//能够匹配正则表达式的内容将会高亮,比如这里的int

    public EleventhPanel(PrimaryFrame primaryFrame) {
this.primaryFrame = primaryFrame;
init();
    }

    private void init() {
attribute = new SimpleAttributeSet();
jTextPane = new JTextPane();
styledDocument = jTextPane.getStyledDocument();
add(jTextPane);
setBackground(Color.WHITE);
setSize(600, 400);
// setVisible(true);
// add event
StyleConstants.setForeground(attribute, Color.RED);
jTextPane.addKeyListener(new KeyAdapter() {
    public void keyReleased(KeyEvent arg0) {
Matcher matcher = pt.matcher(jTextPane.getText());
while (matcher.find()) {
    styledDocument.setCharacterAttributes(matcher.start(),
    matcher.end() - matcher.start(), attribute, true);
}
    }
});
    }

}

// //////////////////////////////////////////////////////////////////////////////////////


--------------------编程问答--------------------

public class PrimaryFrame extends JFrame {
    EleventhPanel primaryPanel;

    public PrimaryFrame() {
init();
    }

    /**
     * init
     */
    private void init() {
setTitle("PrimaryFrame");
setLayout(new BorderLayout());
primaryPanel = new EleventhPanel(this);//
add(primaryPanel);
setPreferredSize(new Dimension(600, 400));
pack();
setVisible(true);
setResizable(false);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
     }

}



--------------------编程问答--------------------
引用 1 楼 yktd26 的回复:
Java code

 try {
          jTextPane1.getHighlighter().addHighlight(0, jTextPane1.getText().length(), DefaultHighlighter.DefaultPainter);
        } catch (BadLocationException ble) {
    
     ……



恩,我知道了,我解决了,我用的就是这个、、不过又出现新的问题,怎么能让显示高亮的字符显示在
视野中,就是我的JTextArea 是放在滚动面板JScrollPane里的,怎么能让高亮部分能随滚动条滚动始终
显示能看见。明白我想要的功能吗?就是类似Editplus里的查询功能,查询到就高亮显示且总在视野中。
求大虾们帮忙啦、、、 --------------------编程问答-------------------- 大虾们没有人帮帮忙吗??? --------------------编程问答--------------------
jTextPane1.setCaretPosition(highlightStartPos);
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,