10
votes

JSPINNER: Augmenter la longueur de la boîte de rédaction

J'ai un JSPINNER qui affiche des valeurs décimales de 0,0 à 999,0. Il semble fonctionner correctement, à l'exception du moment où il affiche un numéro dans la zone de rédaction à quatre chiffres, tels que 123,4; Il coupe ensuite une partie du chiffre final car il n'est pas assez long.

Donc, ma question est la suivante: Est-ce que quelqu'un sait-il augmenter la longueur de la fenêtre de l'éditeur d'un JSPINNER?

merci!


2 commentaires

Quelle est la mise en page du conteneur dans lequel vous placez la spinner? Un SSCCE serait idéal.


J'ai supprimé ma réponse comme lorsqu'il est testé, c'était mal.


5 Réponses :


14
votes

Vous pouvez accéder au champ de texte qui est en fait un jformattedtextfield code> par

  • première appelant getEditor () code> sur votre JSPINNER pour obtenir l'éditeur de Spinner Li>
  • lancer l'objet retourné à jspinner.defauletoritor code> li>
  • Appelez ensuite gettextfield () code> à ce sujet. Ensuite, vous pouvez définir que c'est préférable. LI> ul>

    EDIT: Comme indiqué par TrashGOD cependant, l'utilisation d'une disposition appropriée est primordiale et que vous êtes sûr que les dispositions que vous utilisez sont les meilleures est probablement la meilleure façon de résoudre ce problème. P>

    Edit 2: Strong> Ce qui précède est faux car régler la taille préférée de la Textfield ne fait rien. Vous pouvez toutefois définir la taille préférée de l'éditeur lui-même, et cela fonctionne. E.g., P>

    import java.awt.Dimension;
    
    import javax.swing.*;
    
    public class SpinnerBigTextField {
       private static void createAndShowGui() {
          JSpinner spinner = new JSpinner(new SpinnerNumberModel(0.0, 0.0, 999.0,
                0.5));
    
          JPanel panel = new JPanel();
          panel.setPreferredSize(new Dimension(300, 100));
          panel.add(spinner);
    
          JComponent field = ((JSpinner.DefaultEditor) spinner.getEditor());
          Dimension prefSize = field.getPreferredSize();
          prefSize = new Dimension(200, prefSize.height);
          field.setPreferredSize(prefSize);
    
          JFrame frame = new JFrame("SpinnerBigTextField");
          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          frame.getContentPane().add(panel);
          frame.pack();
          frame.setLocationRelativeTo(null);
          frame.setVisible(true);
       }
    
       public static void main(String[] args) {
          SwingUtilities.invokeLater(new Runnable() {
             public void run() {
                createAndShowGui();
             }
          });
       }
    }
    



8
votes

comme FontMetrics varie d'une plate-forme à l'autre, il vaut mieux compter sur le calcul du composant de la taille préférée. Cet exemple montre un spectre de la taille jSpinner pour diverses min et max . Notez en particulier que flowlayout < / a> "laisse chaque composant suppose sa taille naturelle (préférée)."

Entrez la description de l'image ici < / p> xxx


0 commentaires

12
votes

La première réponses d'aéroglisseur n'est pas mauvaise du tout. Vous ne pouvez pas changer la taille directement, mais vous pouvez faire quelque chose comme ceci: xxx

où vous pouvez définir les numéros de colonnes montrés par l'éditeur. Cela changera la taille de la spinner.


1 commentaires

Merci beaucoup pour le simple exemple de 3 lignes! Je cherche partout pour ça :)



2
votes

Modification de la valeur max d'une fileuse augmentera la taille de la zone de texte pour accueillir le grand nombre. Si vous ne souhaitez pas faire de la valeur maximale plus grande, je recommanderais ce que @gorgehortelano a suggéré ...

jcomponent éditeur = myspinner.getitor (); Jformattedtextfield tf = ((jspinner.defauléditor) éditeur) .gettextfield (); tf.setColumns (4);


0 commentaires

3
votes
JSpinner spn=new JSpinner();
spn.setPreferredSize(new Dimension(100,25));
Here,look This is the easy Answer.

0 commentaires