当鼠标在字母上移动时显示字母



我有JTextField,并添加了mousemotionListener。当鼠标在这封信上时,我想得到这封信。但是我不知道 ı 怎么能做到这一点,也不知道 ı 怎么能得到这封信。

这是我的代码

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import javax.swing.border.*;
public class SetText   extends JPanel implements MouseMotionListener 
{
  JTextField text;
  public SetText()
  {  
    text = new JTextField(10);
    text.addMouseMotionListener(this);
    add(text);
  }
  public void mouseMoved(MouseEvent e)
  {
    int x = e.getX();
    int y = e.getY();
    String str = text.getText(x,y);
  }
  public void mouseDragged(MouseEvent e)
  {
  }

谢谢!!!

使用 JTextComponent 的 viewToModel(Point p) 方法获取文本在文档中的位置。例如。。。

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class SetText extends JPanel implements MouseMotionListener {
    private static final float POINTS = 40f;
    JTextField textField;
    private JLabel displayLabel = new JLabel("          ", SwingConstants.CENTER);
    public SetText() {
        textField = new JTextField("Hello world! How's it going?", 20);
        textField.addMouseMotionListener(this);
        // make the text bigger so easier to test
        textField.setFont(textField.getFont().deriveFont(Font.BOLD, POINTS));
        JLabel lbl = new JLabel("Text:");
        lbl.setFont(lbl.getFont().deriveFont(Font.BOLD, POINTS));
        displayLabel.setFont(displayLabel.getFont().deriveFont(Font.BOLD, POINTS));
        JPanel centerPanel = new JPanel();
        centerPanel.add(lbl);
        centerPanel.add(displayLabel);
        setLayout(new BorderLayout());
        add(textField, BorderLayout.PAGE_START);
        add(centerPanel, BorderLayout.CENTER);
    }
    public void mouseMoved(MouseEvent e) {
        int location = textField.viewToModel(e.getPoint());
        String text = textField.getText();
        if (text.isEmpty()) {
            return;
        }
        // if (location > 0 && location < text.length()) {
        if (location >= 0 && location < text.length()) {
            char c = textField.getText().charAt(location);
            displayLabel.setText(String.valueOf(c));
        } else if (location >= text.length()) {
            displayLabel.setText(text.substring(text.length() - 1));
        }
    }
    public void mouseDragged(MouseEvent e) {
    }
    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
           JFrame frame = new JFrame("Set Text");
           frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
           frame.add(new SetText());
           frame.pack();
           frame.setLocationRelativeTo(null);
           frame.setVisible(true);
        });
    }
}

相关内容

  • 没有找到相关文章

最新更新