java - JLabel可以添加到JTextArea吗?

标签 java swing jlabel jtextarea

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

这是我当前不起作用的代码

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

我可以在每次添加消息时将 JLabel 添加到 JTextArea 中吗?

最佳答案

JTextArea 不是在其中插入 JLabels 或任何其他组件的适当 swing 组件。您可以使用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();
            }
        });
    }
}

关于java - JLabel可以添加到JTextArea吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16371475/

相关文章:

在 Android 中打开资源时出现 java.io.FileNotFoundException

java - 适用于可调整大小组件的 LayoutManager

java - 使用多个按钮创建弹出选项框

java - 限制 html JLabel 中的行数

java - JLabel 将纯文本包装为 JTextArea

java - 如何通过切换其中一个值作为键来创建 HashMap 的 HashMap

java - 计算两个瞬间之间的天数、小时数和分钟数

java - Java 中的后置增量

java - JTabbedPane 选定组件始终为 null

Java Swing - 添加图标或文本时 JLabel 宽度发生变化?