我有这种情况,我希望在数字中显示一个数字。该数字将输入到Jtextfield,我希望工具提示以数字显示数量。问题是,工具提示显示较旧的数据。
我写了一些代码来向您展示问题:
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class Test
{
public static void main(String[] args) {
final JFrame frame=new JFrame();
frame.setLayout(new FlowLayout());
frame.setPreferredSize(new Dimension(400,100));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JTextField tf=new JTextField(30);
frame.add(tf);
frame.add(new JTextField(30));
tf.addFocusListener(new FocusListener() {
@Override
public void focusLost(FocusEvent e) {
tf.setToolTipText(tf.getText());
}
@Override
public void focusGained(FocusEvent e) {
tf.setToolTipText(tf.getText());
}
});
SwingUtilities.invokeLater(new Runnable() {
public void run() {
frame.pack();
frame.setVisible(true);
}
});
}
}
让我们采取这种情况,用户在第一个文本字段中键入数字。文本光标仍在同一文本字段中。当用户现在将鼠标指针移动到第一个文本字段上时,工具提示仍然显示旧文本。 现在,当您将焦点移动到第二个文本字段时,第一个文本字段的数据将被提交,因此工具提示也会刷新。
现在如何在尚未在文本字段中提交的文本上显示工具提示?
答案 0 :(得分:4)
如果您想在每次用户输入内容时更新工具提示,您应该向JTextField
的{{3}}添加DocumentListener
,可以使用{{3}检索Document
}}
JTextField#getDocument
有一个例如DocumentListener
答案 1 :(得分:4)
您无法从Focus
抓取此活动,因为它们是从focusLost / focusGained
调用的,如果您想要更改MouseListener
,请简单删除这两种方法并添加JToolTip
动态文本
1)定义ToolTipManager
ToolTipManager ttm = ToolTipManager.sharedInstance();
ttm.setInitialDelay(0);
ttm.setDismissDelay(10000);
2)将其包装到invokeLater
以移除冻结或闪烁
tf.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
tf.setToolTipText(tf.getText());
}
});
}
@Override
public void mouseExited(MouseEvent e) {
}
});
答案 2 :(得分:1)
尝试更新文本字段的文档对象的changedUpdate事件上的工具提示:
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
tf.getDocument().addDocumentListener(new DocumentListener() {
public void changedUpdate(DocumentEvent e) {
tf.setToolTipText(tf.getText());
}
public void removeUpdate(DocumentEvent e) {
tf.setToolTipText(tf.getText());
}
public void insertUpdate(DocumentEvent e) {
tf.setToolTipText(tf.getText());
}
});
答案 3 :(得分:-2)
您应该KeyListener
使用JTextField
。