jtextpane  看了网上给出的例子都是给个固定的字符,就对这个字符改变颜色。
我想要的是像Editplus那样的查找字符功能,当找到时就将其高亮显示出来。
原来我是用JtextArea组件的,可是当调用其select(begin,end)方法却没有反应、、
所以换成jtextpane  ,可以给个例子或实现步骤吗??求大虾们帮忙、、、

解决方案 »

  1.   

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

  2.   

    高亮第一个
    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) {
            }
        }
      

  3.   

    // //////////////////////////////////////////////////////////////////////////////////////
    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);
    }
        }
    });
        }}// //////////////////////////////////////////////////////////////////////////////////////
      

  4.   


    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);
         }}
      

  5.   

    恩,我知道了,我解决了,我用的就是这个、、不过又出现新的问题,怎么能让显示高亮的字符显示在
    视野中,就是我的JTextArea 是放在滚动面板JScrollPane里的,怎么能让高亮部分能随滚动条滚动始终
    显示能看见。明白我想要的功能吗?就是类似Editplus里的查询功能,查询到就高亮显示且总在视野中。
    求大虾们帮忙啦、、、
      

  6.   

    jTextPane1.setCaretPosition(highlightStartPos);