/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
ToolTips
Fra : Janosh


Dato : 17-08-04 13:18

Hej NG

Jeg har et JTextField med en KeyListener. Denne KeyListener lytter om
F11 er skrevet.
Hvis ja, så skal ToolTip vises.

Problemet er hvordan tvinger man tooltips frem uden brug af mus.

På forhånd tak.

janosh

 
 
Rolf Thorup (17-08-2004)
Kommentar
Fra : Rolf Thorup


Dato : 17-08-04 22:18

Janosh wrote:
> Hej NG
>
> Jeg har et JTextField med en KeyListener. Denne KeyListener lytter om
> F11 er skrevet.
> Hvis ja, så skal ToolTip vises.
>
> Problemet er hvordan tvinger man tooltips frem uden brug af mus.
>
> På forhånd tak.

Hej

Interessant lille problem. Om det rent brugbarhedsmæssigt er en god ide
ved jeg ikke.

Du er nødt til at udvide din KeyListener på den ene eller anden måde til
en form for ToolTipManager. Her er mit forslag som er en bearbejdning af
noget kode fra "Swing" 2nd ed. af Robinson og Vorobiev.

Jeg har ikke lige skrevet noget Javadoc, men det skulle ikke være alt
for svært at overskue. Normal Swing håndtering af ToolTips bruger tre
timers, men har jeg fulgt eksemplet fra ovenfor nævnte bog og benyttet
en timer plus en tæller. Den streng der bliver tjekket på er her
hardkodet, og det overlades til læseren at gøre det pænere

Mvh Rolf

class JTextFieldToolTipManager extends KeyAdapter implements
ActionListener {

private JToolTip toolTip = new JToolTip();
private JTextField textField;
private int counter = 0;
private javax.swing.Timer toolTipTimer;

public JTextFieldToolTipManager(JPanel panel, JTextField aTextField) {
textField = aTextField;
toolTip.setTipText("L33T!");
panel.add(toolTip);
toolTip.setVisible(true);
textField.addKeyListener(this);
toolTipTimer = new javax.swing.Timer(1000, this);
toolTipTimer.start();
}

public void keyReleased(KeyEvent ke) {
if (textField.getText().equals("F11")) {
counter = -1;
}
else {
if (toolTip.isVisible()) {
toolTip.setVisible(false);
}
}
}

public void actionPerformed(ActionEvent ae) {
if (counter == 0) {
if (toolTip.isVisible()) {
toolTip.setVisible(false);
}
return;
}
if (counter < 0) {
counter = 4;
toolTip.setVisible(true);
Dimension toolTipDim = toolTip.getPreferredSize();
Rectangle textFieldBounds = textField.getBounds();

toolTip.setBounds(textFieldBounds.x + 10,
textFieldBounds.y + textFieldBounds.height + 20,
toolTipDim.width, toolTipDim.height);
}
counter--;
}
}

Søren Berg Glasius (18-08-2004)
Kommentar
Fra : Søren Berg Glasius


Dato : 18-08-04 08:39


Hej Rolf

Jeg har med interesse læst din kode og synes jeg forstår den Men nu
har jeg ledt gennem javadoc og kan ikke helt gennemskue, hvordan du så
kobler den på et text-field? Kan du give et hint?

MVH
Søren

Rolf E. Thorup (18-08-2004)
Kommentar
Fra : Rolf E. Thorup


Dato : 18-08-04 12:07

Søren Berg Glasius wrote:
>
> Hej Rolf
>
> Jeg har med interesse læst din kode og synes jeg forstår den Men nu
> har jeg ledt gennem javadoc og kan ikke helt gennemskue, hvordan du så
> kobler den på et text-field? Kan du give et hint?

Det kan jeg. Kig på constructoren:

public JTextFieldToolTipManager(JPanel panel, JTextField aTextField) {
textField = aTextField;
toolTip.setTipText("L33T!");
panel.add(toolTip);
toolTip.setVisible(true);
textField.addKeyListener(this);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
toolTipTimer = new javax.swing.Timer(1000, this);
toolTipTimer.start();
}

Den får en reference med til et JTextField og adder "this" som
KeyListener. Jeg ændrede iøvrigt koden lidt bagefter da jeg fik øje på
nogle issues. Her er den ændrede version:

public JTextFieldToolTipManager(Container parent, JTextField aTextField)
            ^^^^^^^^^^^^^^^
{
textField = aTextField;
toolTip.setTipText("L33T!");
panel.add(toolTip);
toolTip.setVisible(false);
       ^^^^^^
textField.addKeyListener(this);
toolTipTimer = new javax.swing.Timer(1000, this);
toolTipTimer.start();
}

Mvh Rolf

Janosh (18-08-2004)
Kommentar
Fra : Janosh


Dato : 18-08-04 21:33

Tak til Rolf.

Enig det er ikke en god løsning - men et krav til opgaven.

/janosh

Søg
Reklame
Statistik
Spørgsmål : 177580
Tips : 31968
Nyheder : 719565
Indlæg : 6409081
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste