2013-06-12 1 views
0

일부 편집자로 행동하기 위해 jEditorPane을 사용하고 있습니다.이 사람은 저를 요구했습니다. 또한 검색 대체 검색이 필요했습니다 ... 그래서 찾기를 선택하고 싶습니다. 그런 다음 필요에 따라 교체하십시오. 자바, 텍스트를 선택하십시오. 정확히 JEditorPane에서

그래서 나는이 간단한 코드 제공 :
private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {           
    int start = (jEditorPane1.getSelectionStart()>jEditorPane1.getSelectionEnd())?jEditorPane1.getSelectionEnd():jEditorPane1.getSelectionStart(); 

    int max = (start>jEditorPane1.getSelectionStart())?start:jEditorPane1.getSelectionStart(); 

    String searchWord = jTextField3.getText(); 
    int searchIndex = jEditorPane1.getText().indexOf(searchWord, max); 
    if(searchIndex != -1){ 
     jEditorPane1.select(searchIndex, searchIndex+searchWord.length()); 
    } 
    else{ 
     jEditorPane1.setSelectionStart(-1); 
     jEditorPane1.setSelectionEnd(-1); 
    } 
}  

가 fortunatelly 응용 프로그램이 좋은 인덱스를 반환,하지만 unfortunatelly보기 창에 나는 어떤 선택을 볼 수 없습니다. 자바에,


PS 도와주세요

나는 새로운 해요. 버튼 동작이 넷빈즈 자체


에서 제공하는 샘플 당신은

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 

/* 
* test.java 
* 
* Created on Jun 12, 2013, 8:23:19 PM 
*/ 
package wordchecker; 

/** 
* 
* @author Hassan 
*/ 
public class test extends javax.swing.JFrame { 

    /** Creates new form test */ 
    public test() { 
     initComponents(); 
    } 

    /** This method is called from within the constructor to 
    * initialize the form. 
    * WARNING: Do NOT modify this code. The content of this method is 
    * always regenerated by the Form Editor. 
    */ 
    @SuppressWarnings("unchecked") 
    // <editor-fold defaultstate="collapsed" desc="Generated Code"> 
    private void initComponents() { 

     jScrollPane1 = new javax.swing.JScrollPane(); 
     jTextPane1 = new javax.swing.JTextPane(); 
     jTextField1 = new javax.swing.JTextField(); 
     jButton1 = new javax.swing.JButton(); 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

     jScrollPane1.setViewportView(jTextPane1); 

     jTextField1.setText("jTextField1"); 

     jButton1.setText("jButton1"); 
     jButton1.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       jButton1ActionPerformed(evt); 
      } 
     }); 

     javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
     getContentPane().setLayout(layout); 
     layout.setHorizontalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addGap(24, 24, 24) 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
        .addGroup(layout.createSequentialGroup() 
         .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) 
         .addComponent(jButton1)) 
        .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 366, Short.MAX_VALUE)) 
       .addContainerGap()) 
     ); 
     layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addContainerGap() 
       .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 234, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addGap(18, 18, 18) 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
        .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
        .addComponent(jButton1)) 
       .addContainerGap(14, Short.MAX_VALUE)) 
     ); 

     pack(); 
    }// </editor-fold> 

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 
     int startFrom = jTextPane1.getSelectionStart(); 
     if(jTextPane1.getSelectionStart() == jTextPane1.getSelectionEnd()){ 
      startFrom = -1; 
     } 

     String searchWord = jTextField1.getText(); 
     int searchIndex = jTextPane1.getText().indexOf(searchWord, startFrom); 
     if(searchIndex != -1){ 
      jTextPane1.select(searchIndex, searchIndex+searchWord.length()); 
     } 
     else{ 
      jTextPane1.setSelectionStart(0); 
      jTextPane1.setSelectionEnd(0); 
     } 
    } 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String args[]) { 
     java.awt.EventQueue.invokeLater(new Runnable() { 

      public void run() { 
       new test().setVisible(true); 
      } 
     }); 
    } 
    // Variables declaration - do not modify 
    private javax.swing.JButton jButton1; 
    private javax.swing.JScrollPane jScrollPane1; 
    private javax.swing.JTextField jTextField1; 
    private javax.swing.JTextPane jTextPane1; 
    // End of variables declaration 
} 
+1

'내가 JEditorPane의 일부 editor'로 좀 역할을 내부 튜닝 해요을 - JEditorPane로 사용하지 마십시오. HTML을 표시하도록 설계되었습니다. 대신 JTextPane을 사용하여 HTML에 대해 걱정할 필요가 없습니다. 문제를 나타내는 [SSCCE] (http://sscce.org/)를 게시하십시오. – camickr

+0

나는 평문을 사용하지만, 그 또한 –

+0

을 jTextPane으로 바꾼다. 그러나 그것도 다시 작동하지 않았다. ... 나는 풀 클래스로 답을했다. 나는 여기에있는 것처럼 보인다. –

답변

2

에게 텍스트 컴퍼넌트에 포커스가있을 경우에만 표시되는 텍스트 구성 요소의 선택을 요청했다. 단추를 클릭하면 텍스트가 표시되지 않으므로 포커스가 표시됩니다. 귀하의 actionPerformed() 메소드의 맨 아래에 다음 당신은 버튼 포커스 불가능한 만들 수있는하거나 추가 할 수 있습니다

또한
jTextPane1.requestFocusInWindow(); 

이는 gettext에() 메소드를 사용하지 마십시오. 이것은 오프셋에 문제를 일으킬 것입니다.

int searchIndex = jTextPane1.getText().indexOf(searchWord, startFrom); 

자세한 내용과 해결 방법은 Text and New Lines을 참조하십시오. 오프셋은 검색을 수행 할 때 일치하는 다음 텍스트를 선택 있도록

int length = textPane.getDocument().getLength(); 
String text = textPane.getDocument().getText(0, length); 

위에만 EOL 문자열로 "\ n을"를 반환합니다 :이 링크의 기본은 사용하는 것입니다.

편집 :

나는 일반적으로 다음과 같은 코드를 사용합니다

int startFrom = jTextPane1.getCaretPosition(); 
+0

감사 남자, 나는 떠났지만, 나는 그것이 형광등과 캐럿의 혼합과 같이 작동하기를 바라고 다른 것들을 시도해 보았으나, \ n과 2 개의 문자로 다른 이스케이프 처리 이후, 그들은 일치하지 않았다. 질문이 하나 더 있습니다. 초점을 맞췄지만 초점을 맞추지 못했지만 내 선택이 다음 위치로 이동하지 못했습니다. '( 내가 놓친 것 같아요? –

+0

나는 대답을 이미 답변으로 표시하고 이동합니다. 다른 옵션을 시도해 보시길 바랍니다.하지만 여전히 희망을 갖고 싶습니다. * 감사합니다. –

+0

"그렇지만 우리는 모두 할 일이 있습니다."그래서 항상 원래의 SSCCE를 게시해야합니다. 질문을하므로 우리는 자유 시간을 가질 때 즉시 완전한 답을 얻을 수 있습니다. 우리는 언제 다시 자유 시간을 갖게 될지 결코 모릅니다. "하지만 여전히 나의 선택은 다음 위치를 찾지 못합니다."제 편집을보십시오. – camickr

관련 문제