2014-11-05 45 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