2014-06-06 5 views
0

JTextPane과 굵게 표시된 글꼴을 나타내는 확인란이 있습니다. 그래서 체크 박스가 체크되어 있다면 JTextPane에 타이프하는 것이 무엇이든 굵게 나타내기를 원한다. JTextPane의 전체 글꼴을 변경하고 싶지는 않습니다. 다음 글자를 굵게 설정하고 싶습니다. 나는이를 만들고, 그것을 작동 :다음 입력에 대한 Java 스타일 문서 변경 속성

///framework is JTextPane 
framework.addKeyListener(new KeyListener() { 
     StyledDocument doc = framework.getStyledDocument(); 
     @Override 
     public void keyTyped(KeyEvent e) { 
      // TODO Auto-generated method stub 
      if(boldcheck.isSelected()){ 


       StyleContext sc = new StyleContext(); 
       Style ns = sc.addStyle("a", null); 
       ns.addAttribute(StyleConstants.Bold, new Boolean(true)); 



       try { 
        String s = Character.toString(e.getKeyChar()); 
        doc.insertString(doc.getLength(),s, ns); 
        framework.remove(doc.getLength()); 

       } catch (BadLocationException e1) { 
        // TODO Auto-generated catch block 
        e1.printStackTrace(); 
       } 




      } 
    ///// rest of keylistener 

하지만 난 그것을

    doc.insertString(doc.getLength(),s, ns); 
        framework.remove(doc.getLength()); 

내가 doc.setCharacterAttributes(doc.getLength(),1, ns, true)하지만 실 거예요 작업과 시도를 할 수있는 좋은 아이디어라고 생각하지 않으며, 내가 keyReleaseddoc.setCharacterAttributes(doc.getLength()-1,1, ns, true)을 할 경우 나쁘게 작동 할 것이고 나는 무엇을 타이핑했는지 보게 될 것입니다. 그리고 나는 그것을 chaning으로 볼 것입니다. 그리고 빠르게 타이핑하면 어떤 글자의 속성을 변경하지 않을 것입니다. 그렇다면 누가 더 나은 방법을 알 수 있습니까?

답변

0

다음 실행 가능한 코드가 요구 사항에 적합 할 수 있습니다. 나는 그것이 더 낫다는 것을 결정하기 위해 당신에게 맡깁니다. 희망은 유용합니다.

public class TextEditorDemo { 

    private JTextPane textpane; 
    private JCheckBox checkbox; 

    public TextEditorDemo() 
    { 
     initGUI(); 

     textpane.getStyledDocument().addDocumentListener(new DocumentListener() 
     { 
      @Override 
      public void changedUpdate(DocumentEvent arg0) 
      { 

      } 

      @Override 
      public void insertUpdate(DocumentEvent arg0) 
      { 
       if(checkbox.isSelected()) 
       { 
        setBold(arg0); 
       } 
      } 

      @Override 
      public void removeUpdate(DocumentEvent arg0) 
      { 

      } 
     }); 
    } 

    private void initGUI() 
    { 
     JFrame frame = new JFrame("TextEditorDemo"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(400, 300); 

     checkbox = new JCheckBox("Bold"); 
     textpane = new JTextPane(); 

     frame.getContentPane().add(checkbox, BorderLayout.NORTH); 
     frame.getContentPane().add(textpane, BorderLayout.CENTER); 
     frame.setVisible(true); 
    } 

    private void setBold(final DocumentEvent evt) 
    { 
     if(evt.getLength() <= 1) 
     { 
      Runnable setColor = new Runnable() 
      { 
        @Override 
        public void run() 
        { 
         Style style = textpane.addStyle("insert", null); 
         StyleConstants.setBold(style, true); 
         textpane.getStyledDocument().setCharacterAttributes(evt.getOffset(), evt.getLength(), style, true); 
        } 
      };  
      SwingUtilities.invokeLater(setColor); 
     } 
    } 

    public static void main(String[] args) 
    { 
     TextEditorDemo demo = new TextEditorDemo(); 
    } 
}