Maison  >  Article  >  Java  >  Comment puis-je implémenter la fonctionnalité de saisie semi-automatique en Java à l'aide de JTextfield et JList ?

Comment puis-je implémenter la fonctionnalité de saisie semi-automatique en Java à l'aide de JTextfield et JList ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-17 13:56:02555parcourir

How can I implement autocomplete functionality in Java using JTextfield and JList?

Fonctionnalité de saisie semi-automatique avec JTextfield et JList

Les fonctionnalités de saisie semi-automatique améliorent l'expérience utilisateur en présentant des suggestions basées sur une saisie partielle. Pour un programme de saisie semi-automatique utilisant JTextfield et JList, il est essentiel d'implémenter un mécanisme qui fournit des suggestions au fur et à mesure que l'utilisateur tape.

Algorithme

  1. Trier ArrayList : Pour des performances optimales, triez la liste des suggestions avant tout traitement. Cela réduit le temps de recherche lorsque l'utilisateur tape des caractères.
  2. Implémenter la recherche incrémentielle : Au fur et à mesure que l'utilisateur tape, le programme recherche dans la liste les chaînes qui correspondent à l'entrée actuelle.
  3. Affichage des suggestions de contrôle : Basé sur l'algorithme utilisé pour la recherche incrémentielle, le programme peut afficher des suggestions pertinentes à l'utilisateur.

Implémentation du code

Considérez l'extrait de code Java suivant qui démontre la fonctionnalité de saisie semi-automatique :

import java.awt.*;
import java.util.ArrayList;
import javax.swing.*;

public class AutoCompleteTextField {

    private ArrayList<String> listSomeString = new ArrayList<String>();
    private Java2sAutoTextField someTextField = new Java2sAutoTextField(listSomeString);
    private ArrayList<String> listSomeAnotherString = new ArrayList<String>();
    private Java2sAutoComboBox someComboBox = new Java2sAutoComboBox(listSomeAnotherString);

    public AutoCompleteTextField() {
        
        // Populate suggestion lists
        listSomeString.add("-");
        listSomeString.add("Snowboarding");
        listSomeString.add("Rowing");
        listSomeString.add("Knitting");
        listSomeString.add("Speed reading");
        listSomeString.add("Pool");
        listSomeString.add("None of the above");

        listSomeAnotherString.add("-");
        listSomeAnotherString.add("XxxZxx Snowboarding");
        listSomeAnotherString.add("AaaBbb Rowing");
        listSomeAnotherString.add("CccDdd Knitting");
        listSomeAnotherString.add("Eee Fff Speed reading");
        listSomeAnotherString.add("Eee Fff Pool");
        listSomeAnotherString.add("Eee Fff None of the above");
        
        // Initialize and customize components
        someTextField.setFont(new Font("Serif", Font.BOLD, 16));
        someTextField.setForeground(Color.black);
        someTextField.setBackground(Color.orange);
        someTextField.setName("someTextField");
        someTextField.setDataList(listSomeString);

        someComboBox.setPrototypeDisplayValue("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
        someComboBox.setFont(new Font("Serif", Font.BOLD, 16));
        someComboBox.setForeground(Color.black);
        someComboBox.setBackground(Color.YELLOW);
        someComboBox.getEditor().selectAll();
        someComboBox.getEditor().getEditorComponent().setBackground(Color.YELLOW);
        ((JTextField) someComboBox.getEditor().getEditorComponent()).setDisabledTextColor(Color.black);
        someComboBox.setName("someComboBox");
        someComboBox.setDataList(listSomeAnotherString);
        
        // Create frame and add components
        frame = new JFrame();
        frame.setLayout(new GridLayout(0, 1, 10, 10));
        frame.add(someTextField);
        frame.add(someComboBox);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocation(100, 100);
        frame.pack();
        frame.setVisible(true);
 
        // Focus and select text field
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                someTextField.setText("-");
                someComboBox.getEditor().setItem(0);
                someComboBox.getEditor().selectAll();
                someTextField.grabFocus();
                someTextField.requestFocus();
                someTextField.setText(someTextField.getText());
                someTextField.selectAll();
            }
        });
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                AutoCompleteTextField aCTF = new AutoCompleteTextField();
            }
        });
    }
}

Résultat

Ce code créera un JFrame avec deux composants : un JTextfield et une JList. Au fur et à mesure que vous tapez dans le JTextfield, le programme recherchera des suggestions dans la liste des chaînes et les affichera dans la JList.

Personnalisation

Vous pouvez personnaliser le comportement de la fonctionnalité de saisie semi-automatique en fonction de vos besoins, comme modifier l'algorithme de tri, ajuster le format d'affichage des suggestions ou définir un nombre maximum de suggestions à afficher.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn