Wie nennt man soetwas ?

Thomas Lorenz

Bekanntes Mitglied
Servus Gemeinde,

in Excel gibt es eine Funktion, bei ich beim Hineinschreiben in eine Zelle in einer Art Kontextmenü Begriffe aufgelistet
bekomme, ich der Buchstabenfolge in der Zelle entsprechen.

Ich würde so etwas gerne in einer JTextArea machen. An der Stelle an der der Cursor steht, soll dann
eine Liste erscheinen, die aus einem Vector die Begriffe anzeigt, die dem eingegebenen String entsprechen (ab der letzten Leerstelle).
Das Menü kann dann mit den Pfeiltasten durchlaufen werden.
Bei "Enter" wird der Begriff aus der Liste in die Textarea geschrieben.

Ich brauche nicht unbedingt eine komplette Lösung,
aber einen Lösungsansatz würde ich gerne hier lesen.

Thomas
 

Thomas Lorenz

Bekanntes Mitglied
Danke Andre,

und wie erreiche ich es, dass ich , wenn dieses JPopUpMenu aufgeht, mit einem Tastendruck in dieses Menu springen kann?

Also ich meine, während des Schreibens muss der Frame mit der Textarea aktiv sein, aber als schwebendes Fenster sollte dann
dieses JPopupMenu daneben 'schweben'.
 

André Uhres

Top Contributor
während des Schreibens muss der Frame mit der Textarea aktiv sein, aber als schwebendes Fenster sollte dann dieses JPopupMenu daneben 'schweben'.
Damit die Textarea stets aktiv bleibt:
Java:
jTextArea1.addFocusListener(new FocusAdapter() {
    @Override
    public void focusLost(FocusEvent e) {
        jTextArea1.requestFocusInWindow();
    }
});
Um die für's Menu relevanten KeyEvents abzufangen:
Java:
jTextArea1.addKeyListener(new KeyAdapter() {

    @Override
    public void keyPressed(KeyEvent e) {
        if (jPopupMenu1.isVisible()) {
            if (e.getKeyCode() == KeyEvent.VK_DOWN
                    || e.getKeyCode() == KeyEvent.VK_UP) {
                jPopupMenu1.dispatchEvent(e);
            }
...
 
Zuletzt bearbeitet:

Ebenius

Top Contributor
Hm. Das mit dem FocusListener wird so nicht ganz funktionieren. Da die Pfeiltasten das Menü steuern sollen, müsste das Menü eigentlich Fokus haben. Alle nicht benötigten Ereignisse müsste das Menü an die TextArea zurück geben.

Vielleicht ist es hier auch besser, ein JWindow zu benutzen und darauf eine JList zu setzen. Die TextArea müsste dann per Key-Binding die Aktionen für up und down so definieren, dass zuerst getestet wird, ob das Fenster sichtbar ist. Falls dem so ist, müsste die Selektion der Liste geändert werden, anderen Falls die Original-Aktion ausgeführt.

So in etwa :)

Ebenius
 

André Uhres

Top Contributor
Die TextArea müsste dann per Key-Binding die Aktionen für up und down so definieren, dass zuerst getestet wird, ob das Fenster sichtbar ist. Falls dem so ist, müsste die Selektion der Liste geändert werden, anderen Falls die Original-Aktion ausgeführt.
So ähnlich hab ich das ja oben gemacht und es funktioniert auch, d.h. die Menuitems werden optisch ausgewählt, während der "insert cursor" der Textarea weiter blinkt. Letzteres ist ein Feature, das imho nur mit dem gezeigten Focuslistener zu lösen ist, der die Textarea aktiviert hält. Leider wird das SelectionModel vom Popupmenü nicht angepasst, keine Ahnung warum. Darum hat man beim "Enter" das Problem, dass man nicht weiss, welches Item ausgewählt wurde. Man muss wohl mehr implementieren als einem lieb ist :( .

Ich glaube allerdings jetzt auch, dass ein Fenster mit JList hier besser ist, schon allein weil die JList "scrollable" ist.

Irgendwie machbar ist das Ganze jedenfalls, wie dieses Beispiel zeigt: Swing - autocomplete popup list menu

EDIT:
Ich weiss jetzt, wie man das ausgewählte Wort bekommt, nämlich mit Hilfe von "MenuSelectionManager.defaultManager().getSelectedPath()", etwa so:
Java:
MenuElement[] selectedPath = MenuSelectionManager.defaultManager().getSelectedPath();
for (MenuElement menuElement : selectedPath) {
    Component component = menuElement.getComponent();
    if( component instanceof JMenuItem){
        JMenuItem item = (JMenuItem) component;
        System.out.println(item.getText());
    }
}
Dann müsste es auch mit JPopupMenu funktionieren. Zudem gibt es hier eine Klasse um es "scrollable" zu machen: Menu Scroller Java Tips Weblog, allerdings ist diese Art zu scrollen wohl gewöhnungsbedürftig :) .
 
Zuletzt bearbeitet:

Ähnliche Java Themen


Oben