J'ai deux JFormattedTextField
pour les variables Montant et compte Non.
but :
- Les deux champs doit accepter que le numéro
- Acc ne peut prendre jusqu'à 15 caractères qui peuvent varier 8-15. De même montant peut avoir jusqu'à 6 caractères et varie également.
Pour ce faire, j'utilisé , MaskFormatter
mais le problème est la « variation ». Certains acc est de 15 chiffres, certains sont 12 chiffres si tout en utilisant MaskFormatter
limité à 15, il devient obligatoire de saisir 15 chiffres sinon les données insérées disparaît lors de l' exécution lorsque nous quittons laJFormattedTextField
Est - il possible de réaliser à la fois scénario swing java?
S'il vous plaît me suggérer
Utilisez un DocumentFilter
. Ensuite , vous pouvez personnaliser le filtre pour vos besoins spécifique.
Un exemple de base pour commencer:
import java.awt.*;
import javax.swing.*;
import javax.swing.text.*;
public class DigitFilter extends DocumentFilter
{
@Override
public void insertString(FilterBypass fb, int offset, String text, AttributeSet attributes)
throws BadLocationException
{
replace(fb, offset, 0, text, attributes);
}
@Override
public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attributes)
throws BadLocationException
{
Document doc = fb.getDocument();
// add check here check the length of the text currently in the document
// with the length of your text String to make sure the total is not above the maximum
// you should modify the class to pass a paramenter when you create the class for the
// maximum length so the class can be reused
if (isDigit( text ))
super.replace(fb, offset, length, text, attributes);
else
Toolkit.getDefaultToolkit().beep();
}
private boolean isDigit(String text)
{
for (int i = 0; i < text.length(); i++)
{
if (! Character.isDigit( text.charAt(i) ) )
return false;
}
return true;
}
private static void createAndShowGUI()
{
JTextField textField = new JTextField(15);
AbstractDocument doc = (AbstractDocument) textField.getDocument();
doc.setDocumentFilter( new DigitFilter() );
JFrame frame = new JFrame("Integer Filter");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout( new java.awt.GridBagLayout() );
frame.add( textField );
frame.setSize(220, 200);
frame.setLocationByPlatform( true );
frame.setVisible( true );
}
public static void main(String[] args) throws Exception
{
EventQueue.invokeLater( () -> createAndShowGUI() );
/*
EventQueue.invokeLater(new Runnable()
{
public void run()
{
createAndShowGUI();
}
});
*/
}
}
Vous aurez besoin d'ajouter une logique séparée (externe au DocumentFilter) pour vous assurer que la longueur du compte est au moins 8 chiffres avant de faire votre traitement.
Lisez la section du tutoriel Swing sur la mise en œuvre d' un filtre de document pour un exemple d'un filtre qui limite le nombre de caractères. La logique de là doit être combinée avec l'exemple ici.