2013-05-04 108 views
0

有没有办法将JLabel添加到JtextArea?因为我尝试add,但它没有工作,并将其设置为可见true,是否允许在JTextArea内添加JLabel?通过追加?可以将JLabel添加到JTextArea吗?

这里是一个没有工作

jta = new JTextArea(); 
jta.setEditable(false); 
jta.setLineWrap(true); 
jta.setWrapStyleWord(true); 
jta.setFont(new Font("calibri", Font.PLAIN,16)); 
jlArray = new JLabel("radsjhkaljk sadf"); 
jta.add(jlArray); 
jta.setVisible(true); 
jspTextField = new JScrollPane(jta); 

我当前的代码我可以附加的JTextArea内的JLabel添加一条消息,每次?

+0

我想提出一个聊天框,得到该消息的文本区域内的用户名并打印出来这就是为什么我需要选择JLabel appendded每次消息被添加 – 2013-05-04 07:02:55

+1

然后不要使用'JLabel',只需使用'String'。 – 2013-05-04 07:04:05

+0

但我希望用户名可点击 – 2013-05-04 07:05:27

回答

4

JTextArea不是合适的swing组件插入JLabels或其中任何其他组件。您可以使用JTextPane来达到此目的。例如,考虑如下代码: enter image description here

import javax.swing.*; 
import javax.swing.text.*; 
import javax.swing.border.*; 
import java.awt.event.*; 
import java.awt.*; 

class JLabelToTextPane extends JFrame implements ActionListener 
{ 
    JTextField tf; 
    JTextPane tp ; 
    JButton click; 
    StyledDocument doc; 
    SimpleAttributeSet attr; 
    public void createAndShowGUI() 
    { 
     setTitle("Add JLabel to JTextPane"); 
     tf = new JTextField(10); 
     tp = new JTextPane(); 
     click = new JButton("Click"); 
     doc = tp.getStyledDocument(); 
     attr = new SimpleAttributeSet(); 
     JScrollPane pane = new JScrollPane(tp); 
     JPanel nPanel = new JPanel(); 
     nPanel.add(tf);nPanel.add(click); 
     tf.addActionListener(this); 
     click.addActionListener(this); 
     Container c = getContentPane(); 
     c.add(nPanel,BorderLayout.NORTH); 
     c.add(pane); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setSize(300,200);setLocationRelativeTo(null);setVisible(true); 
    } 
    @Override 
    public void actionPerformed(ActionEvent evt) 
    { 
     String text = tf.getText(); 
     if (text!=null && !"null".equals(text) && !"".equals(text.trim())) 
     { 
      JLabel label = new JLabel(text); 
      label.setOpaque(true); 
      label.setBackground(Color.gray); 
      label.setBorder(BorderFactory.createLineBorder(Color.black,1)); 
      tp.setCaretPosition(tp.getDocument().getLength()); 
      tp.insertComponent(label); 
      label.addMouseListener(new MouseAdapter() 
      { 
       public void mouseClicked(MouseEvent evt) 
       { 
        String text = ((JLabel)evt.getSource()).getText(); 
        JOptionPane.showMessageDialog(JLabelToTextPane.this,"Hi, My text is "+text,"Information",JOptionPane.INFORMATION_MESSAGE); 
       } 
      }); 
      try 
      { 
       doc.insertString(doc.getLength(), " ", attr); 
      } 
      catch (BadLocationException ex) 
      { 
       ex.printStackTrace(); 
      } 
     } 
    } 
    public static void main(String[] args) 
    { 
     SwingUtilities.invokeLater(new Runnable() 
     { 
      @Override 
      public void run() 
      { 
       JLabelToTextPane lta = new JLabelToTextPane(); 
       lta.createAndShowGUI(); 
      } 
     }); 
    } 
} 
+0

甜....... :) – 2013-05-04 11:54:42

+0

@AndrewThompson:谢谢:) – 2013-05-04 14:56:30

+0

这是有帮助的我不能竖起大拇指它导致我有13repu – 2013-05-05 01:43:33