2015-12-02 56 views
1

我正在創建一個程序來從JTextArea中獲取文本並將其放入JLabel,但JLabel只是一個謊言,而且我知道將多行添加到JLabel將使用必須放置在文本中的html函數。我將如何創建新的行,有沒有辦法找到JTextArea版本的新行或者是完全不同的東西?使用其他文本中的多行創建JLabel

回答

5

最簡單的解決方案:不要使用JLabel。將你的文本放入一個JTextArea,它像一個JL​​abel,看起來像 - 這不是不透明,可聚焦或不可編輯的。

例如,

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(); 
      } 
     }); 
    } 
} 
+0

或包裹文本在並將其應用到一個拉布勒,但這通常更靈活 – MadProgrammer