2012-08-28 2 views
5

Swing에서 StyledEditorKit를 확장하여 편집기 안에 JLabel을 포함 할 수있게하려고합니다. 나는 그것을 할 수 있었고 이것이 내가 지금까지 얻은 것입니다. 아래 이미지에서 강조 표시된 텍스트 은 JLabel 유형이지만 나머지 텍스트는 일반 텍스트입니다. 당신이 레이블을 볼 수 있듯이JLabel을 JEditorPane에 추가하는 방법?

enter image description here

는 일반 텍스트보다 약간 아래에 렌더링합니다. 어떻게 상단을 나머지 텍스트 상단에 정렬합니까?

class ComponentView(Element elem) { 
     @Override 
     protected Component createComponent() { 
     JLabel lbl = new JLabel(""); 
     lbl.setOpaque(true); 
     lbl.setBackground(Color.red); 
     try { 
       int start = getElement().getStartOffset(); 
       int end = getElement().getEndOffset(); 
       String text = getElement().getDocument().getText(start, end - start); 
       lbl.setText(text); 
     } catch (BadLocationException e) {} 
     return lbl; 
     } 
} 

답변

5

ComponentView에서 제안 텍스트 기준선 성분 상대적인 위치를 제어 Component.getAlignmentY 조정 시도 : 여기

이 라벨 요소를 생성하기 위해 사용되는 도면에 대한 코드이다.

임베디드 구성 요소를보다 쉽게 ​​지원할 수있는 JTextPane을 사용해 볼 수도 있습니다. 구성 요소는 insertComponent() 메서드를 사용하여 추가 할 수 있습니다. 다음은 데모 예입니다. setAlignmentY :

import java.awt.BorderLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTextPane; 
import javax.swing.SwingUtilities; 

public class TextPaneDemo { 
    private static void createAndShowGUI() { 
     final JTextPane pane = new JTextPane(); 
     pane.setText("Some text"); 

     JButton buttonButton = new JButton("Insert label"); 
     buttonButton.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent event) { 
       JLabel label = new JLabel("label"); 
       label.setAlignmentY(0.85f); 
       pane.insertComponent(label); 
      } 
     }); 

     JPanel panel = new JPanel(new BorderLayout()); 
     panel.add(buttonButton, BorderLayout.SOUTH); 
     panel.add(pane, BorderLayout.CENTER); 

     JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.add(panel); 
     frame.setSize(400, 200); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       createAndShowGUI(); 
      } 
     }); 
    } 
} 
관련 문제