Toon posts:

[Java] requestFocus() en JDK versies

Pagina: 1
Acties:

Verwijderd

Topicstarter
Stel, er zijn 2 componenten:
1. Een canvas
2. Een textfield

De Canvas bevat een MouseListener, als je met de muis klikt in het Canvas dan moet ie als actie de String "hallo" naar het TextField zetten. Zie onderstaande AWT code (alleen noodzakelijke weergegeven)
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
//canvas is een Canvas
//textfield is een TextField
canvas.addMouseListener(new MouseListener()
{
   public void mousePressed(MouseEvent e)
   {
        textfield.setText("Hallo");
        textfield.requestFocus(); //na het klikken moet textfield actieve component zijn
        textfield.setCaretPosition((textfield.getText()).length()); //cursor achter "hallo"
   }
  
   //4 andere methoden van mouselistener weggelaten hier
});

Wat is het probleem? De code wordt gecompiled met JDK 1.1.8, omdat de Applet waarin deze code zit toegankelijk moet zijn voor iedereen. Met de JVM werkt het ook prima, maar met een plugin van Sun (versie 1.4) doet ie de requestFocus() niet. De vraag is dus: hoe kan dat?

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Hmmmzz.. ik weet wel dat er veel focus problemen zijn bij java. Bv bij IDEA moesten er speciale hacks in worden geplaatst om met 1.3 te werken en vanaf 1.4 schijnt het verbeterd te zijn. Zoek anders even op het forum van Sun.

[edit]
Ik zie dat jij geen zin had om al die methodes van die interface te implementeren. Bij de meeste listeners zijn er ook adapters gemaakt waarin alle methodes geimplementeerd zijn, als jij dan weer van zo`n adapter extend, hoef je alleen nog maar de desbetreffende methode te overriden. Dat scheelt je weer een stuk werk :)

En probeer verder die requestFocus eens na de setCaretPosition.

[ Voor 49% gewijzigd door Alarmnummer op 20-03-2003 10:35 ]


  • ari3
  • Registratie: Augustus 2002
  • Niet online
requestFocus() hoeft het niet te doen. Het is immers een verzoek en dus geen mandaat. JavaDoc bevestigt dit ook.

Nog even over het waarom:
Een goede windowmanager staat niet toe dat een applicatie schermen naar de voorgrond brengt. Anders zou je een situatie kunnen krijgen waarin applicaties met elkaar concurreren om hun scherm op de voorgrond te krijgen. Dit gebeurt met name onder Windows met irritante pop-up advertenties. Het is aan de gebruiker om te bepalen welk scherm op de voorgrond mag staan.

[ Voor 4% gewijzigd door ari3 op 20-03-2003 11:43 ]

"Kill one man, and you are a murderer. Kill millions of men, and you are a conqueror. Kill them all, and you are a god." -- Jean Rostand