Swing Wie Fokus richtig setzen?

jf

Bekanntes Mitglied
Hallo, der Teufel steckt wie immer im Detail!
Um meine Anwendung besonders benutzerfreundlich zu gestalten, möchte ich gerne in die Fokus-Verwaltung eingreifen.
- Leider ist mir das nicht so recht gelungen... hier ist mein Problem:

Ich habe ein JList, welche über bestimmte Nutzer-Aktionen (Setzen von Häckchen in verschiedenen befüllt wird JCheckBoxen). Nach jeder dieser Aktionen soll der Fokus auf die JList gelegt werden. Ich habe folgendes bereits probiert (im ActionListener, nach dem Befüllen der JList):

Java:
listView.grabFocus();				// geht nur halb
//listView.requestFocus();			// geht nur halb
//listView.requestDefaultFocus();	// geht nicht
//listView.requestFocusInWindow();	// geht nur halb

Ohne diese Zeilen werden gar keine Nutzereingaben an die JList weitergeleitet. Mit diesen Zeilen (abgesehen von der dritten Zeile), ist nach der Nutzer-Aktion ein Rollen durch die JList mittels Pfeiltasten möglich. - Ein Selektieren aller Listbox-Einträge mit Strg+A ist allerdings weiterhin nur möglich, wenn nach der Nutzer-Aktion noch einmal separat die Tabulator-Taste gedrückt wird.
Warum ist das so? - Gibt es dafür einen sinnvollen Grund?
Wie kann ich diesen Mangel beseitigen?

Vielen Dank für eure Unterstützung!
 
Zuletzt bearbeitet von einem Moderator:

Enigma228

Bekanntes Mitglied
Habs zwar nicht getestet, aber wie wäre es wenn du gleich nach grabFocus() die erste Zeile deiner JList selektieren lässt?

Nachtrag:
Habs eben testen können, funktioniert leider auch nicht..
 
Zuletzt bearbeitet:

jf

Bekanntes Mitglied
Man nehme einen FocusListener!! grins
Naja, der FocusListener erkennt doch nur, wenn sich der Fokus ändert - erst beeinflusst diesen jedoch nicht.

Ich glaube aber nun zu wissen, warum sich dieses Verhalten zeigt:
Ich habe meine eigene Komponente geschrieben, welche ein JScrollPane und eine JList enthält, so dass ich recht einfach eine rollbare Listbox erstellen kann. :) Dabei erweitert diese Komponente JScrollPane.
Wenn ich den Fokus auf diese Komponente setze, so erhält wahrscheinlich nur die JScrollPane den Fokus, was erklären würde, warum auch die Pfeiltasten funktionierten - nicht aber Strg+A.

Ich müsste nun wahrscheinlich nur einen FocusListener in meine Komponente einbauen und sobald diese den Fokus erhält, diesen an die JList weiter delegieren. Fraglich ist nur, ob dann immer noch die Pfeiltasten funktionieren, oder nur noch Strg+A...

Naja, ich werde es ja sehen.
Sollten dann nur noch Strg+A gehen, werde ich mich sicher noch einmal hierzu melden. ;)
 

Enigma228

Bekanntes Mitglied
Damit keine Missverständnisse auftreten.. du wolltest wenn man zb. eine CheckBox anklickt den Focus danach auf der List haben??

ich habe mal was zusammengeschustert, damit wir mal ne Basis haben:
Java:
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.DefaultListModel;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;

public class Frame2 extends JFrame implements ActionListener {

	private JScrollPane sp;
	private JList l;
	private JCheckBox chb;
	private DefaultListModel dtml;
	
	public Frame2(){
		this.setLayout(new GridLayout(2, 1));
		chb = new JCheckBox("Hinzu");
		chb.addActionListener(this);
		dtml = new DefaultListModel();
		l = new JList(dtml);
		sp = new JScrollPane(l);
		this.add(chb);
		this.add(sp);
	}
	
	@Override
	public void actionPerformed(ActionEvent e) {
		if(e.getSource()==chb){
			if(chb.isSelected()){
				dtml.addElement("Checkbox ist selected");
			}else dtml.addElement("Checkbox ist nicht selected");
			l.requestFocus();
		}
	}
}
 

jf

Bekanntes Mitglied
Damit keine Missverständnisse auftreten.. du wolltest wenn man zb. eine CheckBox anklickt den Focus danach auf der List haben??
Ja, richtig.

ich habe mal was zusammengeschustert, damit wir mal ne Basis haben:
Danke, aber ich hatte ja bereits erwähnt, dass man einfach nur den Fokus von der Komponente auf die interne JList legen müsste (welche über Komposition in der Komponenten-Klasse definiert ist).
Das hat so auch wunderbar funktioniert - ich musste nur meinen Quelltext wie folgt erweitern (im Konstruktor):
Java:
		// Focus managment
		this.addFocusListener( new FocusListener() {
			@Override
			public void focusGained(FocusEvent e) {
				listComponent.grabFocus();
			}
			@Override
			public void focusLost(FocusEvent e) {
				// not needed!
			}
		});

Deine Idee, den ersten Listbox-Eintrag zu selektieren hätte übrigens auch funktioniert.
- Aber so habe ich eine universelle Lösung: sie funktioniert automatisch überall da, wo ich meine Listbox-Komponente einsetze. :)
Außerdem wird auch der Fokus auf die Listbox gelegt, wenn nur die Rollleiste der JScrollPane angeklickt wird.
 
G

Gast2

Gast
Du musst dein gradFocus aufruf ganz am Schluß machen und mit invokeLater synchronisieren dann müsste es gehen:

Java:
SwingUtilities.invokeLater...

{
listComponent.grapFocus();
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M KeyEvent ohne Fokus konsumieren AWT, Swing, JavaFX & SWT 1
H Swing Wie Fokus von JTextField entfernen? AWT, Swing, JavaFX & SWT 9
CptK Fokus auf geöffnetes Zweit-Fenster setzen und Eingaben außerhalb blocken AWT, Swing, JavaFX & SWT 2
Neumi5694 Swing Card-Layout, Fokus AWT, Swing, JavaFX & SWT 2
M JavaFX Absoluter Fokus während drag Event AWT, Swing, JavaFX & SWT 10
P Fokus auf Zelle in JTable AWT, Swing, JavaFX & SWT 1
C SWT MenuBar & MenuItems Fokus wenn F10 unterdrücken/entfernen AWT, Swing, JavaFX & SWT 9
1 Swing Bestimme ob ein Subelement eines panel den Fokus verloren hat AWT, Swing, JavaFX & SWT 2
B Swing Fokus auf JPanel setzen AWT, Swing, JavaFX & SWT 2
J Swing Fokus JInternalFrame fehlerhaft AWT, Swing, JavaFX & SWT 4
B Fokus markierung entfernen AWT, Swing, JavaFX & SWT 2
C AWT Fokus von Component entfernen, wenn kein anderes vorhanden AWT, Swing, JavaFX & SWT 4
A Vordergrund und Fokus setzten oder Modales Einabefeld AWT, Swing, JavaFX & SWT 28
G SWT Fokus auf MsgBox setzen AWT, Swing, JavaFX & SWT 3
M Fokus für KeyListener AWT, Swing, JavaFX & SWT 9
A Fokus wieder in ein JTextField setzen AWT, Swing, JavaFX & SWT 4
N Filternde Combobox in JTable verliert Fokus nach erster Eingabe AWT, Swing, JavaFX & SWT 2
T Swing Fokus AWT, Swing, JavaFX & SWT 2
I Swing Wie bekomme ich den Fokus für einen JPanel AWT, Swing, JavaFX & SWT 5
H Swing Problem mit FocusCycleRoot, der FocusTraversalPolicy und dem Fokus AWT, Swing, JavaFX & SWT 2
G Problem beim setzen des Fokus AWT, Swing, JavaFX & SWT 4
E Swing Mit rechter Maustaste Fokus in JList setzen?! AWT, Swing, JavaFX & SWT 3
F Rechte Maustaste auf TreeNode soll den Fokus auf diese setzen AWT, Swing, JavaFX & SWT 6
agent47 Swing auf Schnelltaste ohne Fokus hören AWT, Swing, JavaFX & SWT 2
M JSpinner als TableCellEditor; buttons nur bei fokus sichtbar AWT, Swing, JavaFX & SWT 14
Z Fokus auf Eingabefeld bei showMessageDialog setzen AWT, Swing, JavaFX & SWT 3
N Herkunft des Fokus erkennbar (via Klick oder Tab-Steuerung)? AWT, Swing, JavaFX & SWT 4
F Panel kann nicht Fokus erhalten AWT, Swing, JavaFX & SWT 2
N Textfeld füllen sobald es den Fokus verliert AWT, Swing, JavaFX & SWT 2
D JTable, Model, Fokus AWT, Swing, JavaFX & SWT 3
multiholle AWT Hotkey ohne Fokus AWT, Swing, JavaFX & SWT 6
W JTextArea/TextArea kriegt keinen Fokus AWT, Swing, JavaFX & SWT 6
T Fokus auf CB in Table mit beliebiger Taste AWT, Swing, JavaFX & SWT 12
G JOptionPane.showInputDialog(): Texteingabe und Fokus AWT, Swing, JavaFX & SWT 3
V Kein Fokus für Key Bindings auf JPanel bzw JApplet AWT, Swing, JavaFX & SWT 2
R Fokus von GUI-Elementen AWT, Swing, JavaFX & SWT 3
F Herausfinden, auf welchem Objekt der Fokus liegt AWT, Swing, JavaFX & SWT 2
V JTable verliert Fokus, wie offene Zelle schliessen? AWT, Swing, JavaFX & SWT 5
S Eventhandling obwohl Fenster nicht im Fokus AWT, Swing, JavaFX & SWT 5
GilbertGrape bei "Enter" Funktion ausführen, egal wo der Fokus AWT, Swing, JavaFX & SWT 2
A Fokus in ein Textfeld setzen funktioniert nicht AWT, Swing, JavaFX & SWT 3
A ComboBox soll reagieren ohne fokus AWT, Swing, JavaFX & SWT 7
C Probleme einem JPanel den Fokus zuzuweisen AWT, Swing, JavaFX & SWT 2
A Fokus und JTextField AWT, Swing, JavaFX & SWT 35
T JList mit eigenem TransferHandler: Fokus(?)-Probleme AWT, Swing, JavaFX & SWT 4
D JButton mit Fokus soll auf ENTER reagieren AWT, Swing, JavaFX & SWT 3
M Frame erhält ungewollt den Fokus AWT, Swing, JavaFX & SWT 10
V JTable Handling Fokus on Keystroke und Maus Doubleclick AWT, Swing, JavaFX & SWT 9
S JTextArea mit Scrollbar,append Text mit Fokus? AWT, Swing, JavaFX & SWT 5
G Event, wenn JTextField Fokus verliert? AWT, Swing, JavaFX & SWT 2
C Der hartnäckige Fokus AWT, Swing, JavaFX & SWT 3
G Keylistener/Fokus Problem AWT, Swing, JavaFX & SWT 3
B Fokus Problem unter Linux AWT, Swing, JavaFX & SWT 7
J JFrame und Fokus AWT, Swing, JavaFX & SWT 4
N Fokus Reihenfolge ändern AWT, Swing, JavaFX & SWT 12
M Fokus auf ein JTextfield in einem JDialog setzen AWT, Swing, JavaFX & SWT 6
I fokus AWT, Swing, JavaFX & SWT 4
Juelin if Abfrage funktioniert nicht richtig AWT, Swing, JavaFX & SWT 10
P AWT Programm funktioniert nicht richtig AWT, Swing, JavaFX & SWT 35
G Button auswerten und ausgeben ob richtig oder falsch AWT, Swing, JavaFX & SWT 1
Telisti Javafx Image wird nicht richtig integiert AWT, Swing, JavaFX & SWT 8
MouseEvent richtig initialisieren AWT, Swing, JavaFX & SWT 1
T ScrollEvent richtig(er) abfangen? AWT, Swing, JavaFX & SWT 0
B Output GUI funktioniert nur beim ersten Mal richtig. AWT, Swing, JavaFX & SWT 4
princess_sara1997 .jar Datei führt den Code nicht richtig aus AWT, Swing, JavaFX & SWT 19
M JavaFX kann man da noch was am code vereinfachen design technisch sieht nicht richtig aus... AWT, Swing, JavaFX & SWT 15
S Swing Coding richtig einfügen AWT, Swing, JavaFX & SWT 3
F Swing Adapt Row Height funktioniert nicht richtig :( AWT, Swing, JavaFX & SWT 7
W JavaFX Ich kann keinen Kreis richtig zeichnen AWT, Swing, JavaFX & SWT 8
C Polygon Koordinaten richtig sortieren AWT, Swing, JavaFX & SWT 7
E Komponenten von JScrollPane werden nicht richtig ermittelt AWT, Swing, JavaFX & SWT 2
coolian ActionListener funktonirt nicht richtig auf JMenuItem AWT, Swing, JavaFX & SWT 4
J Parallele Aktionen in Java FX richtig durchführen. AWT, Swing, JavaFX & SWT 5
zhermann FX Label text wird nicht richtig angezeigt AWT, Swing, JavaFX & SWT 12
D JFrame wird nicht richtig angezeigt AWT, Swing, JavaFX & SWT 1
Joker4632 JavaFX GridPane richtig implementieren AWT, Swing, JavaFX & SWT 7
K Swing GUI aktualisiert nicht richtig AWT, Swing, JavaFX & SWT 5
X JavaFX AreaChart area höhe wird nicht richtig dargestellt AWT, Swing, JavaFX & SWT 2
A Swing Zeichnung wird nicht richtig dargestellt AWT, Swing, JavaFX & SWT 4
I Neues JFrame wird nicht richtig angezeigt AWT, Swing, JavaFX & SWT 5
R Swing Bewegung eines Graphics Objektes innerhalb eines JPanels funktioniert nicht richtig AWT, Swing, JavaFX & SWT 2
D Swing Warum erhalte ich keine Ausgabe? Funktioniert der equals-vergleich in actionPeformed nicht richtig? AWT, Swing, JavaFX & SWT 3
V JFrame wird nicht richtig angezeigt! AWT, Swing, JavaFX & SWT 2
H UpdatePolicy wird nicht richtig gesetzt / funktioniert nicht AWT, Swing, JavaFX & SWT 5
C Swing GUI extrem langsam - GUI-Code richtig ausführen AWT, Swing, JavaFX & SWT 1
M JavaFX TextArea richtig formatieren AWT, Swing, JavaFX & SWT 4
A SWT Wie legt man ein UI vom Programmcode her richtig an? AWT, Swing, JavaFX & SWT 3
C KeyPressed funktioniert auf iOS nicht richtig? AWT, Swing, JavaFX & SWT 4
M "ImageIO.read()" liest Bild nicht richtig ein AWT, Swing, JavaFX & SWT 3
A Swing Frames richtig erstellen AWT, Swing, JavaFX & SWT 3
W SWT Dialog richtig schließen? AWT, Swing, JavaFX & SWT 0
F AWT Grafik wird nicht richtig aktualisiert AWT, Swing, JavaFX & SWT 2
B mouseOnEntered ( Controller richtig implementieren) AWT, Swing, JavaFX & SWT 4
M Repaint mittels Button richtig aufrufen klappt nicht AWT, Swing, JavaFX & SWT 1
K Initialisierung von Oberfläche Richtig? AWT, Swing, JavaFX & SWT 5
TheSorm Swing JScroolBar richtig benutzen AWT, Swing, JavaFX & SWT 0
D Panel in Panel zentriert nicht richtig AWT, Swing, JavaFX & SWT 3
K Swing JList - Element richtig hinzufügen AWT, Swing, JavaFX & SWT 4
D Swing fullscreen switch geht nicht richtig AWT, Swing, JavaFX & SWT 8
F Swing Wie verwalte ich meine Panels richtig? AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben