Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

pb de cadrage avec JPasswordField

9 réponses
Avatar
Jean-Marie
bonjour

JPasswordField(int columns) me permet de limiter
le nombre de caractères du password à rentrer ;
mais j'ai un pb à l'affichage : lorsque je tape
un nombre de caractères égal au nb de colonnes,
le dernier caractère déborde du champ (donc n'apparait pas) ;
je m'attendais à ce que le champ affiche
tous les caractères !
j'ai essayé différentes fontes,
çà ne change rien et si je surcharge JPasswordField
pour forcer la largeur passée en paramètre aux méthode
getMinimumSize, getMaximumSize et getPreferredSize,
c pire !

qn a-t'il une solution ?

merci d'avance

jean-Marie

9 réponses

Avatar
TestMan
bonjour

JPasswordField(int columns) me permet de limiter
le nombre de caractères du password à rentrer ;
mais j'ai un pb à l'affichage : lorsque je tape
un nombre de caractères égal au nb de colonnes,
le dernier caractère déborde du champ (donc n'apparait pas) ;
je m'attendais à ce que le champ affiche
tous les caractères !
j'ai essayé différentes fontes,
çà ne change rien et si je surcharge JPasswordField
pour forcer la largeur passée en paramètre aux méthode
getMinimumSize, getMaximumSize et getPreferredSize,
c pire !

qn a-t'il une solution ?

merci d'avance

jean-Marie

Bonjour,


Un lien webstart vers un exemple du problème ?
Version de la VM utilisée, OS & Version, ... etc

A+
TM

Avatar
Jean-Marie
Bonjour

je compile en 1.4 (je peux pas plus car j'ai jbuilder 8
donc bridé par le javac de borland pour la version professionnelle)
à l'exécution le résultat est le même qq soit la JVM (1.4 ,1.5, 1.6)
je suis sous windows

JM

bonjour

JPasswordField(int columns) me permet de limiter
le nombre de caractères du password à rentrer ;
mais j'ai un pb à l'affichage : lorsque je tape
un nombre de caractères égal au nb de colonnes,
le dernier caractère déborde du champ (donc n'apparait pas) ;
je m'attendais à ce que le champ affiche
tous les caractères !
j'ai essayé différentes fontes,
çà ne change rien et si je surcharge JPasswordField
pour forcer la largeur passée en paramètre aux méthode
getMinimumSize, getMaximumSize et getPreferredSize,
c pire !

qn a-t'il une solution ?

merci d'avance

jean-Marie

Bonjour,


Un lien webstart vers un exemple du problème ?
Version de la VM utilisée, OS & Version, ... etc

A+
TM



Avatar
Raphael Tagliani
Bonjour!

Utilisez un layout manager pour contraindre le positionnement et la
taille de votre champ de texte (voir SpringLayout, GridLayout,
GridBagLayout, ou mieux: FormLayout de JGoodies.com).

Si vous avez besoin d'un exemple, je peux en créer un si vous le voulez.

bonjour

JPasswordField(int columns) me permet de limiter
le nombre de caractères du password à rentrer ;
mais j'ai un pb à l'affichage : lorsque je tape
un nombre de caractères égal au nb de colonnes,
le dernier caractère déborde du champ (donc n'apparait pas) ;
je m'attendais à ce que le champ affiche
tous les caractères !
j'ai essayé différentes fontes,
çà ne change rien et si je surcharge JPasswordField
pour forcer la largeur passée en paramètre aux méthode
getMinimumSize, getMaximumSize et getPreferredSize,
c pire !

qn a-t'il une solution ?

merci d'avance

jean-Marie



Avatar
Jean-Marie
Bonjour

je vais essayer
Merci pour l'info

Bonjour!

Utilisez un layout manager pour contraindre le positionnement et la
taille de votre champ de texte (voir SpringLayout, GridLayout,
GridBagLayout, ou mieux: FormLayout de JGoodies.com).

Si vous avez besoin d'un exemple, je peux en créer un si vous le voulez.

bonjour

JPasswordField(int columns) me permet de limiter
le nombre de caractères du password à rentrer ;
mais j'ai un pb à l'affichage : lorsque je tape
un nombre de caractères égal au nb de colonnes,
le dernier caractère déborde du champ (donc n'apparait pas) ;
je m'attendais à ce que le champ affiche
tous les caractères !
j'ai essayé différentes fontes,
çà ne change rien et si je surcharge JPasswordField
pour forcer la largeur passée en paramètre aux méthode
getMinimumSize, getMaximumSize et getPreferredSize,
c pire !

qn a-t'il une solution ?

merci d'avance

jean-Marie






Avatar
Raphael Tagliani
Bonjour

je vais essayer
Merci pour l'info



En fait, vous pouvez probablement vous faciliter la tâche en utilisant
la méthode jpf.setMargin(new Insets(5, 5, 5, 5));
qui permet de définir une marge entre le texte saisi et les bords de
votre textfield.
Voici un petit exemple pour vous aider:

import java.awt.Container;
import java.awt.GridLayout;
import java.awt.Insets;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPasswordField;


public class PFExample extends JFrame {
PFExample() {
this.setBounds(100, 100, 400, 200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JPasswordField jpf = new JPasswordField(5);
jpf.setMargin(new Insets(5, 5, 5, 5));
JLabel labpwd = new JLabel("Password: ");

Container content = this.getContentPane();
content.setLayout(new GridLayout(1, 2));
content.add(labpwd);
content.add(jpf);

this.setVisible(true);
}

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

}

Avatar
Jean-Marie
j'ai testé ce code et je ne suis
pas limité à 5 caractères mais
je peux en rentrer au - autant que peut
en contenir la largeur de JPasswordField

Bonjour

je vais essayer
Merci pour l'info



En fait, vous pouvez probablement vous faciliter la tâche en utilisant
la méthode jpf.setMargin(new Insets(5, 5, 5, 5));
qui permet de définir une marge entre le texte saisi et les bords de
votre textfield.
Voici un petit exemple pour vous aider:

import java.awt.Container;
import java.awt.GridLayout;
import java.awt.Insets;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPasswordField;


public class PFExample extends JFrame {
PFExample() {
this.setBounds(100, 100, 400, 200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JPasswordField jpf = new JPasswordField(5);
jpf.setMargin(new Insets(5, 5, 5, 5));
JLabel labpwd = new JLabel("Password: ");

Container content = this.getContentPane();
content.setLayout(new GridLayout(1, 2));
content.add(labpwd);
content.add(jpf);

this.setVisible(true);
}

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

}



Avatar
Jean-Marie
JPasswordField(n) controle le nombre de colonnes pas de caractère
(javais confondu)

j'ai finalement utilisé le code :
http://www.commentcamarche.net/forum/affich-1809529-longueur-limite-d-un-text-dans-un-textfield
c qd mm galère!

Bonjour

je vais essayer
Merci pour l'info



En fait, vous pouvez probablement vous faciliter la tâche en utilisant
la méthode jpf.setMargin(new Insets(5, 5, 5, 5));
qui permet de définir une marge entre le texte saisi et les bords de
votre textfield.
Voici un petit exemple pour vous aider:

import java.awt.Container;
import java.awt.GridLayout;
import java.awt.Insets;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPasswordField;


public class PFExample extends JFrame {
PFExample() {
this.setBounds(100, 100, 400, 200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JPasswordField jpf = new JPasswordField(5);
jpf.setMargin(new Insets(5, 5, 5, 5));
JLabel labpwd = new JLabel("Password: ");

Container content = this.getContentPane();
content.setLayout(new GridLayout(1, 2));
content.add(labpwd);
content.add(jpf);

this.setVisible(true);
}

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

}



Avatar
Raphael Tagliani
Ok, je pensais que le problème était juste de ne pas avoir de
débordement du texte en dehors du textfield.
Le code que vous citez... est une solution, mais je préfère utiliser un
document (c'est 'plus propre', enfin, celà correspond plus à la
philosophie swing selon moi...):

import java.awt.Container;
import java.awt.GridLayout;
import java.awt.Insets;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.text.AbstractDocument;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DocumentFilter;
import javax.swing.text.JTextComponent;


public class PFExample extends JFrame {
PFExample() {
this.setBounds(100, 100, 400, 200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JTextComponent textComponent = new JPasswordField();
AbstractDocument doc = (AbstractDocument)textComponent.getDocument();
doc.setDocumentFilter(new FixedSizeFilter(10));

textComponent.setMargin(new Insets(5, 5, 5, 5));
JLabel labpwd = new JLabel("Password: ");

Container content = this.getContentPane();
content.setLayout(new GridLayout(1, 2));
content.add(labpwd);
content.add(textComponent);

this.setVisible(true);
}



class FixedSizeFilter extends DocumentFilter {
int maxSize;

// limit is the maximum number of characters allowed.
public FixedSizeFilter(int limit) {
maxSize = limit;
}

// This method is called when characters are inserted into the
document
public void insertString(DocumentFilter.FilterBypass fb, int
offset, String str,
AttributeSet attr) throws BadLocationException {
replace(fb, offset, 0, str, attr);
}

// This method is called when characters in the document are
replace with other characters
public void replace(DocumentFilter.FilterBypass fb, int offset,
int length,
String str, AttributeSet attrs) throws
BadLocationException {
int newLength fb.getDocument().getLength()-length+str.length();
if (newLength <= maxSize) {
fb.replace(offset, length, str, attrs);
} else {
throw new BadLocationException("New characters exceeds
max size of document", offset);
}
}
}

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

}

=> Une bonne partie du code est reprise de http://www.exampledepot.com/
(je vous conseille de le mettre en bookmark)

De plus, apprendre à travailler avec les documents, c'est très utile si
vous voulez développer vos propres composants GUI complexes et très
adaptés à votre contexte.

JPasswordField(n) controle le nombre de colonnes pas de caractère
(javais confondu)

j'ai finalement utilisé le code :
http://www.commentcamarche.net/forum/affich-1809529-longueur-limite-d-un-text-dans-un-textfield

c qd mm galère!

Bonjour

je vais essayer
Merci pour l'info



En fait, vous pouvez probablement vous faciliter la tâche en utilisant
la méthode jpf.setMargin(new Insets(5, 5, 5, 5));
qui permet de définir une marge entre le texte saisi et les bords de
votre textfield.
Voici un petit exemple pour vous aider:

import java.awt.Container;
import java.awt.GridLayout;
import java.awt.Insets;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPasswordField;


public class PFExample extends JFrame {
PFExample() {
this.setBounds(100, 100, 400, 200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPasswordField jpf = new JPasswordField(5);
jpf.setMargin(new Insets(5, 5, 5, 5));
JLabel labpwd = new JLabel("Password: ");
Container content = this.getContentPane();
content.setLayout(new GridLayout(1, 2));
content.add(labpwd);
content.add(jpf);
this.setVisible(true);
}
public static void main(String[] args) {
new PFExample();
}

}





Avatar
TestMan
JPasswordField(n) controle le nombre de colonnes pas de caractère
(javais confondu)

j'ai finalement utilisé le code :
http://www.commentcamarche.net/forum/affich-1809529-longueur-limite-d-un-text-dans-un-textfield

c qd mm galère!

Bonsoir,


Ne pas être (r)éveillé ça arrive à tout le monde ;-)

Au passage, s'il y a des personnes qui ont du temps et souhaitent
apporter leur aide, la traduction en français de la JavaDoc est ouverte
sur :

http://doc.java.sun.com/DocWeb/
Le travail est fait sous GPLv2 ce qui ne gache rien, et celà peut
constituer une bonne façon de découvrir certains trésors de la
bibliotheque standard...

A+
TM