2014-01-06 37 views
-1

如何更改某個起點的字體?JTextPane更改某個起點的字體

我有一個按鈕,在某個點上切換字體。

例如:

somtext |

按下按鈕

sometext boldedtext |

所以我做了事件鍵釋放,但我可以看到改變字體的不斷釋放鍵

這關鍵公佈事件

  private void textoKeyReleased(javax.swing.event.CaretEvent evt)     {         
      int end = texto.getSelectionEnd(); 
      StyledDocument doc = texto.getStyledDocument(); 

      Style style = texto.getStyle("negra"); 

     if (car==1) 
      { 

      StyleConstants.setBold(style, true); 
      doc.setCharacterAttributes(end-1,end, style, false); 
      texto.requestFocus(); 
      texto.moveCaretPosition(doc.getLength()); 
      } 
     if(car==0) 
     { 
      StyleConstants.setBold(style, false); 
      doc.setCharacterAttributes(end-1 ,end, style, false); 
      texto.requestFocus(); 
      texto.moveCaretPosition(doc.getLength()); 
     } 
    } 

但我看到

第一個

壓軸a

更新不是實時還有另一種方法:

+1

如果您很快就沒有得到體面的答案,請考慮創建併發布[sscce](http://sscce.org)。 –

回答

0

KeyListener接口中的密鑰釋放事件的問題在於,只有在用戶放開密鑰時纔會調用它。在你的代碼中,如果用戶按住一個鍵重複它,只有最後一個字符會根據設置的樣式進行修改。另外,在打字過程中,如果用戶在釋放第一個鍵之前按下第二個鍵,則只會更新最後一個字符。

一種替代方法是在KeyListener接口的keyTyped方法中調用您的代碼。

還簡化了代碼。

private void textoKeyReleased(javax.swing.event.CaretEvent evt) { 
    int end = textPane.getSelectionEnd(); 
    StyledDocument doc = textPane.getStyledDocument(); 

    Style style = textPane.getStyle("negra"); 
    StyleConstants.setBold(style, car == 1); 
    doc.setCharacterAttributes(end - 1, 1, style, false); 
    textPane.requestFocus(); 
} 

@Override 
public void keyTyped(KeyEvent e) { 
    SwingUtilities.invokeLater(new Runnable() {   
     @Override 
     public void run() { 
      textoKeyReleased(null); 
     } 
    }); 
} 
0

閱讀從Swing教程secton上Text Component Features這表明你如何爲粗體屬性創建的JMenuItem。同樣的方法可以用於JButton,因爲粗體Action也可以用在按鈕中。