2012-08-28 21 views
5

Editörün içine bir JLabel ekleyebilmek için StyledEditorKit'i Swing'e genişletmeye çalışıyorum. Bunu yapabildim ve şu ana kadar aldım. Aşağıdaki resimde, vurgulanan metin düğmesi JLabel türündeyken, metnin geri kalan kısmı normal metindir. etiketi görebileceğiniz gibiJLabel to JEditorPane'a nasıl eklenir?

enter image description here

normal metinden biraz daha aşağıda vermektedir. Üstünü kalan metnin üst kısmıyla nasıl hizalarım?

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; 
     } 
} 

cevap

5

ComponentView önerildiği gibi metin başlangıca göre bileşenin konumunu kontrol eder Component.getAlignmentY ayarlamayı deneyin: İşte

bu etiket unsuru oluşturmak için kullanılır görünümü için kodudur.

Ayrıca, gömülü bileşenler için daha kolay destek sağlayan JTextPane kullanmayı da deneyebilirsiniz. Bileşenler, insertComponent() yöntemi kullanılarak eklenebilir. İşte bir örnek, aynı zamanda 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(); 
      } 
     }); 
    } 
}