Kennt awt.list keine Tastatureingabe?

P

Phatdaro

Gast
Hallo zusammen.

Java:
private java.awt.List listWords = new java.awt.List(10);

//Der Liste werden mit listWords.add() Einträge übergeben

listWords.repaint();
listWords.setVisible(true);
listWords.requestFocus();
Ich habe in einem Programm eine awt.List, diese wird verwendet um dem Nutzer während er schreibt Wortvorschläge anzubieten.
Der Nutzer schreibt also und während dessen taucht diese Liste auf. Nun möchte ich aber, dass der Nutzer durch drücken der "Pfeil hoch" und "Pfeil runter" Tasten in dieser Liste navigieren kann.

Den Focus setzte ich schon auf die Liste, aber die Liste reagiert nicht auf Tastatureingaben ... ist das normal?
Muss ich mir das selektieren mit Tastatur da selbst reinprogrammieren?
 

eRaaaa

Top Contributor
Nein normal sollte das schon gehen. Was ich mich frage ist, wo tippt denn der Nutzer die Wörter ein? In ein Textfeld? Dann hat die Liste natürlich automatisch schon gar nicht mehr den Fokus! Eine kleine Demo wäre gut, so etwas in der Art (igitt awt ^^):
Java:
	public static void main(String[] args) throws Exception {
		Frame frame = new Frame();
		Panel panel = new Panel();
		java.awt.List listWords = new java.awt.List(10);
		listWords.add("hallo");
		listWords.add("welt");
		listWords.requestFocus();
		panel.add(listWords);
		frame.add(panel);
		frame.pack();
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
	}

:D
 
P

Phatdaro

Gast
Hallo

ich werde meinen Code und die Funktion mal etwas genauer ausführen^^:

Man hat ein TextPane, in dem kann der Nutzer Code schreiben, bevor man den Code schreibt legt man Variablen in einem andren Fenster fest. Wenn man nun den Text schreibt kann man die ersten Buchstaben tippen, danach Strg+Leertaste (wie in NetBeans, VisualStudio usw.) und dann werden einem zu der Eingabe die passenden Variablen angezeigt:
http://i53.tinypic.com/2ln705g.png

Der Code sieht folgendermaßen aus:
Wenn der Nutzer im TextPane Ctrl+Leertaste drückt:

Java:
private void onKeyTyped(KeyEvent e){

        Pattern pwhiteSpaces = Pattern.compile("[\\W]");
        Matcher mwhiteSpaces = pwhiteSpaces.matcher(String.valueOf(e.getKeyChar()));

        //Leerzeichen wurde eingegeben
        if(mwhiteSpaces.matches()){
            if(e.isControlDown() && e.getKeyChar()==' '){
                firstCaretPositionChange = true;
                ctrlWhitespaceactive = true;                    
                processEnteredText(e.getKeyChar());
            }else if (...){
            ...
            }
            ...
}

Die Funktion processEnteredText(char enteredChar) verarbeitet nun die letzte Eingabe, erstellt aus der Eingabe die passende Liste und zeigt danach die awt.List an:

Java:
    private void processEnteredText(char enteredChar){
        boolean dontshow = false;
        listWords.setVisible(false);
        String enteredText = getEnteredText(enteredChar);  // Liefert die letzten eingegebenen Buchstaben zurück 

        //Es werden alle Variablen auf die eingegebenen Buchstaben geprüft und in die List listWords eingefügt
        //Wurden keine Wörter eingegeben werden alle Varablen angezeigt
        listWords.removeAll();
        HashMap allVar = m_SFT.getAllVariables();
        for (Iterator iterator = allVar.values().iterator(); iterator.hasNext();){
            Model_SFT_SCLVarDecl varDecl = (Model_SFT_SCLVarDecl) iterator.next();
            String varName = varDecl.getIdentifier();
            if(varName.startsWith(enteredText) && !enteredText.isEmpty())
                listWords.add(varName);
            else if (enteredText.isEmpty())
                listWords.add(varName);
        }

        if(listWords.getItemCount()>0){
            //Liste wird sortiert
            String[] araylist = listWords.getItems();
            Arrays.sort(araylist);
            listWords.removeAll();
            for (int i = 0; i < araylist.length; i++)
                listWords.add(araylist[i]);

            //Größe, Hintergrund usw. der angezeigten Vorschlagliste werden festgelegt
            listWords.setSize(listWords.getPreferredSize());
            listWords.setBackground(SystemColor.menu);
            listWords.addMouseListener(ivjEventHandler);
            listWords.addKeyListener(ivjEventHandler);

            // CaretPosition wird bestimmt/festgelegt
            if(firstCaretPositionChange)
                firstCaretPosition = ivjTextPaneCode.getCaret().getMagicCaretPosition();
            
            //Position der Auswahlliste wird bestimmt/festlegt
            //Sonderfälle würde die Vorschlagliste aus dem ivjTextPaneCode ragen wird sie bündig mit dem Rand angezeigt
            Point wordListPosition = new Point();
            if(firstCaretPosition.x + listWords.getWidth()> ivjTextPaneCode.getSize().width)
                wordListPosition.x = ivjTextPaneCode.getSize().width - listWords.getWidth();
            else
                wordListPosition.x = firstCaretPosition.x;

            if (firstCaretPosition.y+20 + listWords.getHeight()> ivjTextPaneCode.getSize().height)
                wordListPosition.y = ivjTextPaneCode.getSize().height - listWords.getHeight();
            else
                wordListPosition.y = firstCaretPosition.y+20;
            listWords.setLocation(wordListPosition);
            
            //Vorschlagliste wird angezeigt
            if(!dontshow){
                ivjTextPaneCode.add(listWords);
                listWords.repaint();
                listWords.setVisible(true);
                ivjTextPaneCode.repaint();
                listWords.requestFocus();
            }
        }
   }


Das Problem ist nun, dass der Fokus nicht mehr auf dem TextPane liegt, aber die Tastatureingaben wie "Pfeil hoch" und "Pfeil runter" keine Änderung an der awt.List hervorrufen ...

Kurz gesagt, soll das eigentlich die gleiche Funktion haben wie man es aus jeder aktuellen Entwicklungsumgebung kennt^^

Gruß
Chriss
 

Volvagia

Top Contributor
Schau dir mal das an. Ist einen JTextField mit darunterliegender JComboBox zur Autovervollständigung. Hab ich im Feb. 2010 geschrieben, also alles andere als hübsch. :oops:

Java:
class TextField extends JTextField implements KeyListener, Runnable, DocumentListener
{
	private static final long serialVersionUID = 1L;
	
	private JComboBox fastSelectBox;
	private CommandInputFrame commandInputFrame;
	
	private boolean blockDocumentListener;
	private boolean breakThread;
	private Thread thread;
	private Karen karen;
	
	TextField(JComboBox fastSelectBox, CommandInputFrame commandInputFrame, Karen karen)
	{
		super();

		this.fastSelectBox = fastSelectBox;
		this.commandInputFrame = commandInputFrame;
		this.karen = karen;
		
		addKeyListener(this);
		getDocument().addDocumentListener(this);
	}
	public void keyPressed(KeyEvent arg0)
	{
		int keyCode = arg0.getKeyCode();
		if(arg0.getKeyCode() == KeyEvent.VK_ENTER)
			commandInputFrame.runCommand(getText());
		else if(arg0.getKeyCode() == KeyEvent.VK_ESCAPE)
			commandInputFrame.setVisible(false);
		else if(keyCode == KeyEvent.VK_DOWN)
		{
			if(fastSelectBox.getModel().getSize() - 1 > fastSelectBox.getSelectedIndex())
				fastSelectBox.setSelectedIndex(fastSelectBox.getSelectedIndex() + 1);
			String oldText = getText();
			blockDocumentListener = true;
			setText(fastSelectBox.getSelectedItem().toString());
			blockDocumentListener = false;
			select(getEqualCharCount(oldText, getText()), getText().length());
		}
		else if(keyCode == KeyEvent.VK_UP)
		{
			if(fastSelectBox.getSelectedIndex() > 0)
				fastSelectBox.setSelectedIndex(fastSelectBox.getSelectedIndex() - 1);
			String oldText = getText();
			blockDocumentListener = true;
			setText(fastSelectBox.getSelectedItem().toString());
			blockDocumentListener = false;
			select(getEqualCharCount(oldText, getText()), getText().length());
		}
	}
	private int getEqualCharCount(String s1, String s2)
	{
		int result = 0;
		char[] firstCharArray = s1.toCharArray();
		char[] secondCharArray = s2.toCharArray();
		
		for(int i = 0, size = Math.min(firstCharArray.length, secondCharArray.length); i < size; i++)
		{
			if(firstCharArray[i] == secondCharArray[i])
				result++;
			else
				break;
		}
		return(result);
	}
	
	public void insertUpdate(DocumentEvent e)
	{
		if(!blockDocumentListener)
			beginCollectionCommands();
	}
	private void beginCollectionCommands()
	{
		if(thread != null)
		{
			breakThread = true;
			
			try
			{
				thread.join();
			}
			catch (InterruptedException e) {}
		}
		breakThread = false;
		
		thread = new Thread(this);
		thread.start();
	}
	public void run()
	{
		String text = getText();
		int oldTextLenght = text.length();

		DefaultComboBoxModel model = new DefaultComboBoxModel();		
		for(int i = 0, size = karen.getCommandCount(); i < size && !breakThread; i++)
		{
			Command command = karen.getCommand(i);
			if(command.getData(Command.NAME).startsWith(text))
				model.addElement(command);
		}
		if(!breakThread)
		{
			fastSelectBox.setModel(model);
			if(model.getSize() > 0)
			{
				fastSelectBox.showPopup();
				Object selectedItem = fastSelectBox.getSelectedItem();
				
				blockDocumentListener = true;
				setText(selectedItem.toString());
				blockDocumentListener = false;
				
				select(oldTextLenght, selectedItem.toString().length());
			}
		}
	}
	
	public void keyReleased(KeyEvent arg0) {}
	public void keyTyped(KeyEvent arg0) {}
	
	public void changedUpdate(DocumentEvent e) {}
	public void removeUpdate(DocumentEvent e) {}
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Kennt jemand Dear ImGui (und den Java-Wrapper dazu)? AWT, Swing, JavaFX & SWT 0
J Thread kennt JButton nicht. AWT, Swing, JavaFX & SWT 11
G Kennt jemand diese Komponente? AWT, Swing, JavaFX & SWT 2
N Kennt jemand einen WYSIWYG Editor für AWT? AWT, Swing, JavaFX & SWT 4
K Gutes Buch gesucht (Graphics Only) Kennt jemand eins? AWT, Swing, JavaFX & SWT 5
E Kennt sich jemand mit Observern aus? AWT, Swing, JavaFX & SWT 6
MiMa Obseved List mit ListView (Dateiliste) AWT, Swing, JavaFX & SWT 4
AmsananKING JavaFX Quiz cant fill List AWT, Swing, JavaFX & SWT 1
L Swing Wert vom Textfield in Array List hinzufügen AWT, Swing, JavaFX & SWT 2
M List Listener AWT, Swing, JavaFX & SWT 37
Q-bert Doppelclick auf einem List item AWT, Swing, JavaFX & SWT 9
H Java FX List<AlbumsBean> in FXML TableView AWT, Swing, JavaFX & SWT 37
J private statische List - Datenbankverbindung AWT, Swing, JavaFX & SWT 2
L JavaFX List oder TableView Größe dynamisch anpassen? AWT, Swing, JavaFX & SWT 4
offi Swing Shuttle List AWT, Swing, JavaFX & SWT 9
A JFace/SWT: ListViewer Inhalt nach Selection in zweitem List Viewer aktualisieren! AWT, Swing, JavaFX & SWT 5
D Swing ArrayList in Jlist/ List oder Array in JList/List AWT, Swing, JavaFX & SWT 5
B Map, Set oder List in GUI ausgeben AWT, Swing, JavaFX & SWT 5
G AWT List AWT, Swing, JavaFX & SWT 4
yvesdaeschle List Control mit "card"-Ansicht AWT, Swing, JavaFX & SWT 7
S AWT AWT.List bug oder feature AWT, Swing, JavaFX & SWT 4
E Keine Ausgabe auf Console und List AWT, Swing, JavaFX & SWT 13
reibi SWT SWT - List - DeSelection Problem AWT, Swing, JavaFX & SWT 5
E werte aus List auslesen AWT, Swing, JavaFX & SWT 2
S JTree aus List<File> erstellen AWT, Swing, JavaFX & SWT 8
P List in JTextField ausgeben AWT, Swing, JavaFX & SWT 8
S AWT List: Items überschreiben? AWT, Swing, JavaFX & SWT 6
H SWT Zeilenumbruch in List AWT, Swing, JavaFX & SWT 9
M SWT keine Scrollbar bei widgets.List und GridLayout AWT, Swing, JavaFX & SWT 2
M List in JTree umwandeln AWT, Swing, JavaFX & SWT 10
L Swing JList - Warum Vector und nicht List ? AWT, Swing, JavaFX & SWT 4
P List-Einträge auslesen AWT, Swing, JavaFX & SWT 4
S List<String> in JTextArea! AWT, Swing, JavaFX & SWT 4
I List aus einer JList AWT, Swing, JavaFX & SWT 3
G Objekte in SWT List AWT, Swing, JavaFX & SWT 3
S List übertragen in Label? AWT, Swing, JavaFX & SWT 4
S List Elemente AWT, Swing, JavaFX & SWT 4
G Drag And Drop von Component (List, Tree) zum Desktop AWT, Swing, JavaFX & SWT 2
B List, Item makieren per rechtsklick AWT, Swing, JavaFX & SWT 3
L Renderer mit nativen komponenten in tabelle / tree / list AWT, Swing, JavaFX & SWT 4
M Array List in JTree AWT, Swing, JavaFX & SWT 2
G Frage zur List mit chars AWT, Swing, JavaFX & SWT 7
C Menue verschwindet hinter AWT-List Box.wie beheben? AWT, Swing, JavaFX & SWT 3
S List mit mehrfarbiger Beschriftung AWT, Swing, JavaFX & SWT 2
G AWT: List mehrere Spalten. AWT, Swing, JavaFX & SWT 8
O java.awt.list - string ändern AWT, Swing, JavaFX & SWT 2
P Image und Text in einer List anzeigen AWT, Swing, JavaFX & SWT 12
I Farbe bei List und TextArea AWT, Swing, JavaFX & SWT 1
ExceptionOfExpectation JMenu, setMnemonic(Char k) bringt keine Wirkung AWT, Swing, JavaFX & SWT 8
V JavaFX Bild leer und keine Fehlermeldung AWT, Swing, JavaFX & SWT 21
S JavaFX WebView zeigt keine Animation AWT, Swing, JavaFX & SWT 5
ruutaiokwu SWT "Google Window Builder" tut keine jar's ins Projekt rein bei SWT-Projekt AWT, Swing, JavaFX & SWT 22
H String teilen, damit bei JLabel keine Punkte am Ende angezeigt werden AWT, Swing, JavaFX & SWT 4
L Java FX Keine Anzeige Im Tableview AWT, Swing, JavaFX & SWT 4
richis-fragen JTree +/- verschwidet wenn Knoten keine Kinder hat... AWT, Swing, JavaFX & SWT 6
S java.fxml.load.exception und keine automatische Aktualliseriung der Mainausgabe AWT, Swing, JavaFX & SWT 5
F JList zeigt keine Einträge mehr AWT, Swing, JavaFX & SWT 1
G Swing JButton - Keine Klickanimation AWT, Swing, JavaFX & SWT 4
G JavaFX - Während AudioRecording keine Text eingabe TextField möglich AWT, Swing, JavaFX & SWT 6
N Swing JFormattedTextField keine Werte nach Formatzuweisung AWT, Swing, JavaFX & SWT 0
C Swing JList zeigt keine neuen Einträge an AWT, Swing, JavaFX & SWT 1
X Swing Anwendung regaiert auf keine Buttons mehr wärend while(scanner.hasNextLine()) ausgeführt wird. AWT, Swing, JavaFX & SWT 4
D Swing keine JLabel-Aktualisierung bei "externem" Aufruf durch Helferklasse AWT, Swing, JavaFX & SWT 10
D Swing Warum erhalte ich keine Ausgabe? Funktioniert der equals-vergleich in actionPeformed nicht richtig? AWT, Swing, JavaFX & SWT 3
K Swing Keine Reaktion auf Tastatureingaben bei mehreren Buttons??? AWT, Swing, JavaFX & SWT 4
gamebreiti auf usereingabe warten mit GUI(nur Labels, Buttons etc. keine Texteingaben) AWT, Swing, JavaFX & SWT 3
P Swing JTable keine Markierung nach Button klick AWT, Swing, JavaFX & SWT 0
U Frame zeigt keine Komponenten AWT, Swing, JavaFX & SWT 7
H RCP(SWT) Browser-Widget zeigt keine locale HTML-Dateien an AWT, Swing, JavaFX & SWT 1
N JavaFX Keine Dynamic AWT, Swing, JavaFX & SWT 2
W Swing Ausführung einer .jar zeigt keine Reaktion AWT, Swing, JavaFX & SWT 4
D Swing JList keine Selektionsänderung bei "dragged-Maus" AWT, Swing, JavaFX & SWT 4
N Swing JTable mit Sorter: Keine Sortierung bei Klick in Header AWT, Swing, JavaFX & SWT 3
Ollek JList - neuer Eintrag in ArrayList dadurch keine Anzeige der Objekte AWT, Swing, JavaFX & SWT 18
A trotz setSize keine breite AWT, Swing, JavaFX & SWT 4
Q JTable - Keine Spaltennamen AWT, Swing, JavaFX & SWT 3
H Swing Keine Rückmeldung (freeze) bei setVisible(false) oder dispose() AWT, Swing, JavaFX & SWT 4
B JEditorPane lädt keine Schriftfarbe in HTML AWT, Swing, JavaFX & SWT 2
dzim TableView - keine Aktualisierung geänderter Items AWT, Swing, JavaFX & SWT 5
Kenan89 statischer ActionListener keine Wirkung? AWT, Swing, JavaFX & SWT 2
Kenan89 statischer ActionListener keine Wirkung? AWT, Swing, JavaFX & SWT 3
N Swing Netbeans 7.1 keine DesktopApplication mehr möglich ? AWT, Swing, JavaFX & SWT 15
H JTable zeigt keine Daten an AWT, Swing, JavaFX & SWT 5
C Swing JFrame nimmt keine anderen Elemente auf AWT, Swing, JavaFX & SWT 13
K Applet Wieso kann ich keine Array im Applet initialisieren AWT, Swing, JavaFX & SWT 13
A Swing JTable benutzt keine Checkbox für Booleans AWT, Swing, JavaFX & SWT 9
M Swing Focus für Buttons deaktiviert --> keine Reaktion mehr auf Tastendrücke AWT, Swing, JavaFX & SWT 5
E Keine Ausgabe von JList bei drücken von Button auf die Konsole AWT, Swing, JavaFX & SWT 7
C MouseMotionListener fired keine Events mehr wenn in Button AWT, Swing, JavaFX & SWT 2
D Fenster will keine Ausgabe geben>:( AWT, Swing, JavaFX & SWT 3
K Applet erkennt keine Frameverkleinerung AWT, Swing, JavaFX & SWT 5
O keine ähnliche Farben durch Random in Java AWT, Swing, JavaFX & SWT 21
N JFileChooser - Keine Funtkion AWT, Swing, JavaFX & SWT 13
Y LayoutManager Keine vollständige Darstellung der Tabelle mit GridBagLayout AWT, Swing, JavaFX & SWT 3
H Swing JScrollPane bekommt keine ScrollBars AWT, Swing, JavaFX & SWT 5
bluerob Nach RowSorter -> Keine Tabellenüberschreibung möglich AWT, Swing, JavaFX & SWT 7
V JTextField nimmt keine Eingaben an, nach nachträglichem setVisible des JWindows AWT, Swing, JavaFX & SWT 4
aze JTextField:Keine Markierung AWT, Swing, JavaFX & SWT 6
D Swing keine Tabellen Zeilen ohne Focus AWT, Swing, JavaFX & SWT 7
J Swing JTable, eigener TableCellRenderer Keine Anzeige in den Zellen AWT, Swing, JavaFX & SWT 8

Ähnliche Java Themen

Neue Themen


Oben