2012-08-28 7 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(); 
      } 
     }); 
    } 
} 
関連する問題