2014-11-05 128 views
-1

可以說我有一個字符串的JLabel,選擇JLabel顯示在JFrame:如何格式化的JLabel/JTextField中所以文本換行

public String content="Hello fellow stack-overflowers, I want to format this output"; 
public JLabel jL = new JLabel(); 

一旦做到以下幾點:

jL.setText(content); 

我得到這個輸出:

Hello fellow stack-overflowers, I want to for.. 

但我真正想要的是文本不會繼續超過標籤或文本字段的長度,而是m每4個字左右換一個換行符,例如:

Hello fellow stack-overflowers, I want 
to format this output 

詢問是否需要更多信息。

+1

您可以使用''標籤JLabel。請參閱['是否有JLabel的「自動換行」屬性?](http://stackoverflow.com/questions/7861724/is-there-a-word-wrap-property-for-jlabel)對於JTextField,我會說使用JTextArea來代替。 – Radiodef 2014-11-05 00:27:57

回答

3

一個可能的解決方案是包裝標籤文本中HTML標記,並允許底層佈局管理器來調整它的能力,例如...

Label Test

import java.awt.EventQueue; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class Test100 { 

    public static void main(String[] args) { 
     new Test100(); 
    } 

    public Test100() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(new TestPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TestPane extends JPanel { 

     private JLabel label; 
     private JTextField textField; 

     public TestPane() { 
      label = new JLabel("<html>Hello fellow stack-overflowers, I want to format this output</html>"); 
      textField = new JTextField(10); 

      setLayout(new GridBagLayout()); 
      GridBagConstraints gbc = new GridBagConstraints(); 
      gbc.gridx = 0; 
      gbc.gridy = 0; 
      gbc.anchor = GridBagConstraints.NORTHWEST; 

      add(label); 

      gbc.gridx = 1; 
      gbc.fill = GridBagConstraints.HORIZONTAL; 
      gbc.weightx = 1; 
      add(textField, gbc); 
     } 

    } 

} 

這個例子超出這是壓力的標籤分裂的方式,你可能需要玩的價值有點...

+0

我想你也想設置標籤的最大尺寸,否則佈局經理可能會給它儘可能多的空間。 – MarsAtomic 2014-11-05 00:43:27

+0

@MarsAtomic閱讀[我應該避免在Java Swing中使用set(Preferred | Maximum | Minimum)Size方法嗎?](http://stackoverflow.com/questions/7229226/should-i-avoid-the-爲什麼我沒有;) – MadProgrammer 2014-11-05 00:45:33

+0

@MarsAtomic你說得對,但我會改變'TestPane'的'preferredSize'方法,而不是;) – MadProgrammer 2014-11-05 00:46:10