2010-09-05 10 views
0

Comment puis-je savoir si un texte d'un JTextField est plus grand que la zone visible de ces JTextField, de sorte que je puisse changer la taille de la police?redimensionnement automatique des polices

Merci pour toute aide. Sincèrement Christian

+0

Ne faites pas le texte trop petit à lire! – trashgod

Répondre

1

Au lieu de cela, demandez au JTextField de quelle taille il devrait être d'une police choisie et définir la largeur préférée à votre cahier des charges, par exemple 240 dans l'exemple ci-dessous. L'utilisateur peut utiliser les flèches gauche et droite pour faire défiler le texte.

JTextField.png

import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.Font; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 

/** @see http://stackoverflow.com/questions/3646832 */ 
public class JTextFieldTest extends JPanel { 

    public JTextFieldTest() { 
     String s = "A damsel with a dulcimer in a vision once I saw."; 
     JTextField tf = new JTextField(s); 
     tf.setFont(new Font("Serif", Font.PLAIN, 24)); 
     tf.validate(); 
     int h = tf.getPreferredSize().height; 
     tf.setPreferredSize(new Dimension(240, h)); 
     tf.getCaret().setDot(0); 
     this.add(tf); 
    } 

    private void display() { 
     JFrame f = new JFrame("JTextFieldTest"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.add(this); 
     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new JTextFieldTest().display(); 
      } 
     }); 
    } 
} 

Addendum: Mieux encore, utiliser une mise en page appropriée et définir la taille préférée du panneau contenant en conséquence. Cela permet à votre mise en page initiale de "respirer" si l'utilisateur agrandit la fenêtre.

public JTextFieldTest() { 
    this.setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS)); 
    String s = "It was an Abyssinian maid, and on her dulcimer she played,"; 
    JTextField tf = new JTextField(s); 
    tf.setFont(new Font("Serif", Font.PLAIN, 24)); 
    tf.validate(); 
    int h = tf.getPreferredSize().height; 
    tf.getCaret().setDot(0); 
    this.setPreferredSize(new Dimension(240, h)); 
    this.add(tf); 
} 
1

Il est possible de calculer la largeur du texte pour une police donnée à la classe FontMetrics et comparer cette longueur avec la largeur de TextField.

JtextField field = new JTextField(); 
FontMetrics fm = field.getFontMetrics(field.getFont()); 
int textwidth = fm.stringWidth(field.getText()); 
+0

'TextLayout' est une autre alternative: http://download.oracle.com/javase/6/docs/api/java/awt/font/TextLayout.html – trashgod

Questions connexes