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--;
}
}