【问题标题】:Creating a JLabel with multiple lines from other text使用来自其他文本的多行创建 JLabel
【发布时间】:2015-12-02 21:51:25
【问题描述】:

我正在创建一个程序来从 JTextArea 中获取文本并将其放入 JLabel,但 JLabel 只是一个谎言,我知道向 JLabel 添加多行的唯一方法是使用您拥有的 html 函数放置到文本中。我将如何创建新行,有没有办法找到新行的 JTextArea 版本的位置,或者它是完全不同的东西?

【问题讨论】:

    标签: java swing jlabel


    【解决方案1】:

    最简单的解决方案:不要使用 JLabel。将您的文本放入一个 看起来 像 JLabel 的 JTextArea 中——它不是不透明的、可聚焦的或可编辑的。

    例如,

    import java.awt.event.ActionEvent;
    import javax.swing.*;
    
    @SuppressWarnings("serial")
    public class AreaAsLabel extends JPanel {
        private JTextArea textEntry = new JTextArea(5, 20);
        private JTextArea labelLikeDisplay = new JTextArea(5, 20);
    
        public AreaAsLabel() {
            textEntry.setLineWrap(true);
            textEntry.setWrapStyleWord(true);
    
            labelLikeDisplay.setLineWrap(true);
            labelLikeDisplay.setWrapStyleWord(true);
            labelLikeDisplay.setEditable(false);
            labelLikeDisplay.setFocusable(false);
            labelLikeDisplay.setOpaque(false);
    
            add(new JScrollPane(textEntry));
            add(new JButton(new TransferTextAction("Transfer Text")));
            add(labelLikeDisplay);
        }
    
        class TransferTextAction extends AbstractAction {
            public TransferTextAction(String name) {
                super(name);
                int mnemonic = (int) name.charAt(0);
                putValue(MNEMONIC_KEY, mnemonic);
            }
    
            @Override
            public void actionPerformed(ActionEvent e) {
                String text = textEntry.getText();
                labelLikeDisplay.setText(text);
    
                textEntry.selectAll();
                textEntry.requestFocusInWindow();
            }
        }
    
        private static void createAndShowGui() {
            JFrame frame = new JFrame("AreaAsLabel");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.getContentPane().add(new AreaAsLabel());
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    createAndShowGui();
                }
            });
        }
    }
    

    【讨论】:

    • 或者将文本包裹在一个中,然后应用到一个标签上,不过这样一般更灵活
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-07
    • 1970-01-01
    • 2017-07-02
    • 1970-01-01
    相关资源
    最近更新 更多