gpt4 book ai didi

Java Applet 翻转时文本突出显示

转载 作者:行者123 更新时间:2023-11-30 04:45:33 25 4
gpt4 key购买 nike

我试图弄清楚如何制作不可编辑的文本(不是 JTextField),当鼠标滑过它时,其背景颜色会发生变化。我尝试使用 JButton 实现 ActionListener 并隐藏元素以使按钮看起来只是文本,但它只允许我在鼠标悬停时更改图标并检测何时单击按钮。另一个想法是使用 MouseListener 并声明文本周围矩形的特定坐标,在鼠标移动时它可以启动突出显示。但是,不同的字符串长度和自动换行等存在问题。要实现鼠标悬停时突出显示的文本字段的效果的最佳对象和监听器组合是什么?

最佳答案

嗯,也许可以使用焦点监听器,当字段获得焦点时选择所有文本?

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class TextField extends JTextField {


public TextField(String text) {
super(text);

addFocusListener(new FocusAdapter() {

@Override
public void focusGained(FocusEvent fe) {
selectAll();
}
});
}

public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {

public void run() {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JTextField tf = new JTextField("normal field");
f.add(tf, BorderLayout.CENTER);

TextField ftf =
new TextField("funny text field");
f.add(ftf, BorderLayout.SOUTH);

f.pack();
f.setVisible(true);
}
});
}
}

编辑:

嗯,实际上通过上述方法找到了一种更好的方法,您必须单击文本字段才能获得焦点,现在我使用了一个线程来检查鼠标何时位于组件坐标上,然后突出显示在该字段中,我使用 boolean 值来控制突出显示,因为持续突出显示会引发错误。希望这是您想要的:

import java.awt.*;
import javax.swing.*;

public class TextFieldHighlight extends JTextField {

static JTextField ftf;

public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {

public void run() {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


ftf = new JTextField("Highlight");
ftf.setEditable(false);
f.add(ftf, BorderLayout.CENTER);
f.pack();
f.setVisible(true);
Thread thread = new Thread(new Runnable() {

boolean focused = false;

@Override
public void run() {
while (true) {
if (mouseIsOverDisplayPanel()) {
if (ftf.hasFocus() && focused == false) {
ftf.selectAll();
focused = true;
} else if (!ftf.hasFocus()) {
focused = false;
}
}
}
}
});
thread.start();
}
});

}

private static boolean mouseIsOverDisplayPanel() {

if (MouseInfo.getPointerInfo().getLocation().x >= ftf.getLocationOnScreen().x
&& MouseInfo.getPointerInfo().getLocation().x <= ftf.getLocationOnScreen().x + ftf.getWidth()
&& MouseInfo.getPointerInfo().getLocation().y >= ftf.getLocationOnScreen().y
&& MouseInfo.getPointerInfo().getLocation().y <= ftf.getLocationOnScreen().y + ftf.getHeight()) {

return true;

} else {

return false;

}
}
}

关于Java Applet 翻转时文本突出显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11038874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com