2016-03-22 15 views
0

我正在寫一個jTextPane的getActionMap的行動,當我鍵入')'如果在插入位置有一個')'行動覆蓋符號,否則它通常輸入')'。 這是代碼:找出如果在jTextPane中的某個位置有一個特定的字符[java]

Action action1 = new AbstractAction() { 


       @Override 
       public void actionPerformed(ActionEvent e) { 

        char bracket = ')'; 
        try { 
          int position = jTextPane1.getCaretPosition(); 
          if (jTextPane1.getDocument.getText(position,1)== ")") { 
           jTextPane1.getDocument().remove(position, 1); 
           jTextPane1.getDocument().insertString(position, ")", null); 
          } else { 
           jTextPane1.getDocument().insertString(position, ")", null); 

          } 

        } catch (Exception e1) {} 
       } 

      }; 


      String key1 = "typed)"; 
      jTextPane1.getInputMap().put(KeyStroke.getKeyStroke(key1), key1); 
      jTextPane1.getActionMap().put(key1, action1); 
     } 

我不明白爲什麼,即使的「如果」是真布爾,它不會在IF的路要走。你可以幫我嗎?

+0

你有沒有想過使用'DocumentFilter'? – MadProgrammer

+0

不,我沒有。我認爲KeyStroke的使用對於這種任務是很好的。我如何在這裏使用DocumentFilter? – Pino

+0

'jTextPane1.toString()'?我很驚訝你還沒有碰到索引超出範圍的例外。我想你打算使用'jTextPane1.getText()' – MadProgrammer

回答

2

即使'if'的布爾值爲真,它也不會以if方式進入

您是否做過任何基本的調試以查看發生了什麼?

if (jTextPane1.getDocument.getText(position,1)== ")") { 

問題是你不應該使用「==」來進行對象比較。它永遠不會是真的。

你應該使用equals(...)方法:

這很容易通過簡化代碼,增加了調試語句覈實。

String text = jTextPane1.getDocument().getText(position, 1); 
System.out.println(text); 

if (text.equals(")")) 
{ 
    System.out.println("matches"); 
} 
else 
{ 
    System.out.println("doesn't match"); 
} 

通過上面的簡單代碼,您可以輕鬆驗證文本值是否符合您的期望值。不要用多種方法編寫複雜的語句。將代碼簡化爲多個語句使調試變得更加容易。

2

所以,這是其中當用戶嘗試添加)字符DocumentFilter的一個簡單的例子,看濾波器檢查是否收到字符也是)和基本上拒絕更新

public class TestPane extends JPanel { 

    public TestPane() { 
     setLayout(new BorderLayout()); 
     JTextPane tp = new JTextPane(); 
     add(new JScrollPane(tp)); 

     ((AbstractDocument) tp.getDocument()).setDocumentFilter(new DocumentFilter() { 
      @Override 
      public void insertString(DocumentFilter.FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException { 
       super.insertString(fb, offset, string, attr); 
      } 

      @Override 
      public void remove(DocumentFilter.FilterBypass fb, int offset, int length) throws BadLocationException { 
       System.out.println("Remove"); 
       super.remove(fb, offset, length); 
      } 

      @Override 
      public void replace(DocumentFilter.FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException { 
       if (offset > 0) { 
        String before = fb.getDocument().getText(offset - 1, 1); 
        if (!(")".equals(before) && ")".equals(text))) { 
         super.replace(fb, offset, length, text, attrs); 
        } 
       } else { 
        super.replace(fb, offset, length, text, attrs); 
       } 
      } 

     }); 
    } 

} 

雖然我可以把它添加)當角色被插入是(,它移動的插入符)之後是不是特別有幫助

相關問題