ventanas ventana usar una título titulo personalizar fondo diseño como color codigo centrar cambiar barra java swing autocomplete

usar - personalizar la barra de título de una ventana java



¿Cómo podría implementar la autocompletación usando Swing? (8)

Estoy interesado en proporcionar un cuadro de autocompletado en un JFrame. El mecanismo de activación se basará en mnemónicos (creo), pero no estoy seguro de qué usar para el "cuadro de autocompletado" (me gustaría que los resultados se filtren a medida que el usuario presiona las teclas).

¿Cómo implementarías esto? ¿Algún tipo de JFrame, o un JPopupMenu?

Me gustaría saber cómo se implementa esto, así que no publique enlaces a los Componentes [J] disponibles.


Agregaría un ActionListener para que pueda obtener cada tecla mientras se presiona.

Puede hacer una búsqueda en segundo plano (otro hilo)




Hay un ejemplo de autocompletado para área de texto en
Tutoriales de Sun "Uso de componentes Swing" .

Se hace al estilo de los procesadores de texto (sin ventanas emergentes, pero
el texto sugerido se tipea delante del cursor).

Solo desplácese hacia abajo a "Otro ejemplo: TextAreaDemo"
¡pulsa el botón Iniciar!




Utilizar esta

import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Autocompleter2 { //~ Methods ------------------------------------------------------------------------------------ public static void main(String[] args) throws Exception { // YES, IT''S EMPTY !!! // It''ll start anyway because of static initializers SwingUtilities.invokeLater(new Runnable() { @Override public void run() { final JPopupMenu textPopupMenu = new JPopupMenu("MENU") { { add(new JMenuItem("item 1")); add(new JMenuItem("item 2")); setFocusable(false); } }; final JTextArea textInput = new JTextArea("type something la") { { setCaretPosition(getText().length()); } }; KeyListener textInputListener = new KeyAdapter() { @Override public void keyTyped(KeyEvent e) { Point p = textInput.getCaret().getMagicCaretPosition(); if (textPopupMenu.isVisible()) { SwingUtilities.convertPointToScreen(p, textInput); textPopupMenu.setLocation(p.x, p.y + 20); } else { textPopupMenu.show(textInput, p.x, p.y + 20); } } }; textInput.addKeyListener(textInputListener); new JFrame("TEST") { { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); add(textInput); setSize(400, 60); setLocationRelativeTo(null); setVisible(true); } }; } ; }); } }


Here hay un ejemplo con un pop-up como lo solicitó. Puede iniciar este ejemplo en la parte inferior de la página.

Aquí está mi ejemplo simplificado. Tristemente, primero debe hacer clic en el campo de texto, antes de comenzar a escribir, o obtendrá excepciones. Si alguien puede descubrir por qué, hágamelo saber / actualizar esta respuesta.

import java.awt.*; import java.awt.event.*; import javax.swing.*; public class _Autocompleter { private final static JPopupMenu textPopupMenu = new JPopupMenu("MENU") { { add(new JMenuItem("item 1")); add(new JMenuItem("item 2")); setFocusable(false); } }; private final static KeyListener textInputListener = new KeyAdapter() { @Override public void keyTyped(KeyEvent e) { Point p = textInput.getCaret().getMagicCaretPosition(); if (textPopupMenu.isVisible()) { SwingUtilities.convertPointToScreen(p, textInput); textPopupMenu.setLocation(p.x, p.y + 20); } else { textPopupMenu.show(textInput, p.x, p.y + 20); } } }; private final static JTextArea textInput = new JTextArea("type something") { { addKeyListener(textInputListener); setCaretPosition(getText().length()); } }; private final static JFrame f = new JFrame("TEST") { { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); add(textInput); setSize(400, 60); setLocationRelativeTo(null); setVisible(true); } }; public static void main(String[] args) throws Exception { // YES, IT''S EMPTY !!! // It''ll start anyway because of static initializers } }