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)
Aquí hay un excelente artículo que usa un par de bibliotecas: Agregar Soporte Completo Automáticamente a Comboboxes Swing @ Java.net
Es posible que desee probar el componente gratuito Autocompletar en SwingLabs.
Editar: Este sitio parece haberse movido http://java.net/projects/swinglabs
Hay un ejemplo de cómo implementar este código en:
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!
Puede usar el área de texto de JEdit con el marco integrado de finalización de sintaxis y finalización.
Una solución más pesada (que es buena a largo plazo) es utilizar la plataforma NetBeans .
Puede usar esta biblioteca: http://fifesoft.com/autocomplete/
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
}
}