2014-03-02 35 views

回答

6
  • JTextFields只能顯示一行文本,句點。
  • 如果您需要一個包裝文本的簡單文本組件,請使用JTextArea。
  • 設置其列和行。
  • 把它放到一個JScrollPane中(如果你覺得文本會超出指定的行數)。
  • 撥打setLineWrap(true)就可以了
  • 撥打setWrapStyleWord(true)就可以了。

編輯
你問文本被添加或刪除調整JTextField的大小。我想你總是可以覆蓋JTextField的getPreferredSize()方法,並對文本中的任何更改重新驗證/重新繪製它的容器,但這樣做確實會帶來風險。

例如:

import java.awt.*; 
import javax.swing.*; 
import javax.swing.event.DocumentEvent; 
import javax.swing.event.DocumentListener; 

public class VaryingTextFieldSize { 
    protected static final int GAP = 5; 

    public static void main(String[] args) { 
     final JTextField textField = new JTextField(1) { 
     @Override 
     public Dimension getPreferredSize() { 
      Dimension superPref = super.getPreferredSize(); 
      FontMetrics fontMetrics = getFontMetrics(getFont()); 
      String text = getText(); 
      if (text.length() > 0) { 
       int width = fontMetrics.charsWidth(text.toCharArray(), 0, text.length()) + GAP; 
       return new Dimension(width, superPref.height); 
      } 
      return superPref; 
     } 
     }; 
     textField.getDocument().addDocumentListener(new DocumentListener() { 
     @Override 
     public void removeUpdate(DocumentEvent e) { 
      reSize(); 
     } 

     @Override 
     public void insertUpdate(DocumentEvent e) { 
      reSize(); 
     } 

     @Override 
     public void changedUpdate(DocumentEvent e) { 
      reSize(); 
     } 

     private void reSize() { 
      SwingUtilities.invokeLater(new Runnable() { 
       public void run() { 
        Container container = textField.getParent(); 
        container.revalidate(); 
        container.repaint(); 
       } 
      }); 
     } 
     }); 
     JPanel enclosingPanel = new JPanel(); 
     enclosingPanel.setPreferredSize(new Dimension(300, 100)); 
     enclosingPanel.add(textField); 
     JOptionPane.showMessageDialog(null, enclosingPanel); 
    } 
} 
+0

我只是有一行文字,而不是多行文本 – RiadSaadi

+0

@RiadSaadi:你想這一條線上的多行顯示是的,但你的帖子的狀態。再次,JTextField不能做到這一點,但JTextArea可以。你的來電。 –

+0

也許我沒有解釋得很好,我很抱歉,但我想要的是例如編輯「你好世界」我的jtextField將只是用寬度來寫「Hello world」,如果我想寫「你好的每一個機構世界「,我的jtextField將會比第一個案例更大,但只是爲了包裝」每個人的世界「。 – RiadSaadi

相關問題