2013-10-16 6 views
0

글꼴 목록의 클래스가 있고 JTextPane의 밑줄 글꼴을 만들고 싶습니다. 그러나 이것을 얻는 데 어려움이 있습니다. 굵게 또는 기울임 꼴로 제대로 작동하지만 밑줄 코드를 추가하면 오류가 발생합니다.JTextPane을 사용하여 텍스트의 밑줄을 지정 하시겠습니까?

내 코드는 다음과 같습니다

import java.awt.*; 
    import java.awt.font.TextAttribute; 
    import javax.swing.*; 
    import java.awt.event.*; 
    import java.util.*; 
    import java.io.*; 
    import java.text.*; 
    import javax.swing.text.*; 
    import javax.swing.event.*; 
    import javax.swing.plaf.basic.BasicTextPaneUI; 


class fontlist extends JFrame implements ItemListener,ActionListener 
    { 
     JComboBox jcb,fontSize; 
     Container content; 
     JTextPane jta; 
     JScrollPane jsp; 
     JToggleButton bold,italic,underline; 
     Font font; 
     private static final int[] fontsize = {8,9,10,11,12,14,16,18,20,22,24,26,28,36,48,72}; 
     fontlist() 
     { 
      content=getContentPane(); 
      setLayout(null); 
      setBackground(Color.WHITE); 
      jcb=new JComboBox(); 
      content.add(jcb); 
      jcb.setBounds(100,100,100,20); 
      fontSize=new JComboBox(); 
      content.add(fontSize); 
      fontSize.setBounds(200,100,40,20); 
      bold=new JToggleButton("B"); 
      content.add(bold); 
      bold.setBounds(240,100,45,22); 
      italic=new JToggleButton("I"); 
      content.add(italic); 
      italic.setBounds(285,100,45,22); 
      underline=new JToggleButton("U"); 
      content.add(underline); 
      underline.setBounds(330,100,45,22); 
      jta=new JTextPane(); 
      jsp=new JScrollPane(jta); 
      content.add(jsp); 
      jsp.setBounds(100,120,500,200); 
      jcb.addItemListener(this); 
      fontSize.addItemListener(this); 
      bold.addActionListener(this); 
      italic.addActionListener(this); 
      underline.addActionListener(this); 
      String fonts[] = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames(); 
       for (int i = 0; i < fonts.length; i++) 
       { 
        jcb.addItem(fonts[i]); 
       } 
       for (int j = 0; j <16; j++) 
       { 
        fontSize.addItem(fontsize[j]); 
       } 
     } 
     public void itemStateChanged(ItemEvent ie) 
     { 
     try 
     { 
      if (ie.getStateChange() == ItemEvent.SELECTED) 
      { 
       int size = new Integer(fontSize.getSelectedItem()+""); 
       font = new Font(jcb.getSelectedItem().toString(),Font.PLAIN,size); 
       jta.setFont(font); 

      } 
     } 
     catch(NumberFormatException e){} 
     } 
     public void actionPerformed(ActionEvent ae) 
     { 

      int size = new Integer(fontSize.getSelectedItem()+""); 
      if (bold.isSelected() && italic.isSelected() && underline.isSelected()) 
      { 

        font = new Font(jcb.getSelectedItem().toString(),Font.BOLD+Font.ITALIC,size); 
        jta.setFont(font); 
      } 
      else if(bold.isSelected() && italic.isSelected()) 
      { 
      font = new Font(jcb.getSelectedItem().toString(),Font.BOLD+Font.ITALIC,size); 
       jta.setFont(font); 
      } 
      else if(bold.isSelected()) 
      { 
       font = new Font(jcb.getSelectedItem().toString(),Font.BOLD,size); 
       jta.setFont(font); 
      } 
      else if(italic.isSelected()) 
      { 
       font = new Font(jcb.getSelectedItem().toString(),Font.ITALIC,size); 
       jta.setFont(font); 
      } 
      else if(underline.isSelected()) 
      { 
       font = new Font(jcb.getSelectedItem().toString(),Font.UNDERLINE,size); 
       jta.setFont(font); 
      } 
      else 
      { 
       font = new Font(jcb.getSelectedItem().toString(),Font.PLAIN,size); 
       jta.setFont(font); 
      } 
     } 
     public static void main(String args[]) 
     { 
      fontlist fl=new fontlist(); 
      fl.setSize(700,500); 
      fl.setVisible(true); 
     } 
    } 

답변

4

당신이 JTextPane가를 사용하고 있기 때문에, 당신은 SimpleAttributeSet을 사용해야합니다

SimpleAttributeSet attributeSet = new SimpleAttributeSet(); 
StyleConstants.setUnderline(attributeSet, true); 
jta.getStyledDocument().setCharacterAttributes(0, jta.getText().length(), 
    attributeSet, false); 

당신은 U 버튼을 움직일 때, false로 밑줄 스타일을 설정해야합니다.

+0

감사합니다. 작동하지만 작동하지 않습니다. –

+0

JTextPane (JEditorPane에서 파생 됨)입니다. 나는 내 대답을 편집 할 것이다. – alterfox

+0

이 코드를 내 프로그램에 넣었지만 다시 작동하지 않습니다. –

2

JTextPane을 사용하면 일반적으로 텍스트 블록을 전체 텍스트 창이 아닌 특정 Font로 설정합니다. 즉, 일반적으로 Word와 같은 텍스트 편집기처럼 작동합니다.

Text Component Features의 Swing 튜토리얼의 섹션을 읽고 StyledEditorKit Action을 사용하여이를 수행하는 방법을 보여주는 작동 예제를 참조하십시오.

전체 텍스트 구성 요소에 대해서만 글꼴을 변경할 수 있도록하려는 경우보다 간단한 구성 요소이므로 JTextArea를 사용해야합니다. 이 경우 설정할 수있는 Font.UNDERLINE 속성이 없습니다. 밑줄이있는 글꼴을 만들려면 다음과 같은 코드가 필요합니다.

Font font = textArea.getFont(); 
Map<TextAttribute, Object> map = new HashMap<TextAttribute, Object>(); 
map.put(TextAttribute.FONT, font); 
map.put(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON); 
font = Font.getFont(map); 
textArea.setFont(font);