|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Sep 2004
Città: Sardegna
Messaggi: 98
|
[JAVA] settare il focus
Ciao a tutti!
Come mai se su un frame che implementa un KeyListener eseguo questi metodi: Codice:
frame.setFocusable(true); frame.setVisible(true); |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
setFocusable rende il componente partecipe della catena di elementi a cui può essere attribuito il focus. L'attribuzione concreta del focus a un componente è richiesta con requestFocusInWindow() che, stando alla documentazione, potrebbe anche non funzionare. Di solito però funziona.
|
|
|
|
|
|
#3 | |
|
Member
Iscritto dal: Sep 2004
Città: Sardegna
Messaggi: 98
|
Quote:
|
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
E' anche possibile che non funzioni. Strano ma possibile. Ad esempio su SO Windows XP Home e JRE 1.5.0_07-b03 sembra funzionare:
Codice:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Sample {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() { public void run() {
JFrame frame = new JFrame("Sample");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
handleKey(e);
}
});
frame.setFocusable(true);
frame.setSize(200, 200);
frame.setVisible(true);
frame.requestFocusInWindow();
}});
}
private static void handleKey(KeyEvent e) {
System.out.println(e);
}
}
|
|
|
|
|
|
#5 | |
|
Member
Iscritto dal: Sep 2004
Città: Sardegna
Messaggi: 98
|
Quote:
|
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Però è un effetto non documentato (o è documentato e io me lo sono perso
Così le librerie dicono che affinchè una finestra sia "focusable" (focalizzabile suona così male...) il suo stato "focusable" deve essere impostato a true. Se da qualche parte è scritto che una finestra (magari per effetto del setVisible(true)) subisce una mutazione dello stato "focusable" a true, allora il setFocusable è effettivamente inutile. Per il caso di caralu penso che le scelte siano due: o c'è qualcosa che ci sfugge – magari c'è un componente che trattiene il focus e la documentazione dice che effettivamente può farlo – oppure la questione rientra in quei casi – accennati nella documentazione – in cui i "best efforts" per assegnare il focus ad un componente non producono nulla per dettagli di implementazione. |
|
|
|
|
|
#8 | |
|
Member
Iscritto dal: Sep 2004
Città: Sardegna
Messaggi: 98
|
Quote:
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:05.



















