2012-08-28 29 views
5

Tôi đang cố gắng mở rộng StyledEditorKit trong Swing để có thể bao gồm một JLabel bên trong trình soạn thảo. Tôi đã có thể làm điều đó và đây là những gì tôi đã có cho đến nay. Trong hình bên dưới, văn bản được đánh dấu nút thuộc loại JLabel trong khi phần còn lại của văn bản là văn bản bình thường.Làm cách nào để thêm JLabel vào JEditorPane?

enter image description here

Như bạn có thể thấy nhãn ám một chút so hơn so với văn bản bình thường. Làm cách nào để tôi căn chỉnh đầu của nó bằng đầu văn bản còn lại?

Đây là mã cho quan điểm cho rằng được sử dụng để tạo ra yếu tố nhãn này:

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

Trả lời

5

Hãy thử điều chỉnh Component.getAlignmentY điều khiển vị trí của thành phần liên quan đến các cơ sở văn bản như đề xuất trong ComponentView.

Bạn cũng có thể thử sử dụng JTextPane để cung cấp hỗ trợ dễ dàng hơn cho các thành phần được nhúng. Các thành phần có thể được thêm vào bằng phương pháp insertComponent(). Dưới đây là một ví dụ, nó cũng trình diễn 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(); 
      } 
     }); 
    } 
} 
Các vấn đề liên quan