gpt4 book ai didi

java - 检测 JTextArea 上的悬停

转载 作者:行者123 更新时间:2023-12-02 05:18:28 26 4
gpt4 key购买 nike

我想在用户将鼠标悬停在 JTextArea 上时向其添加边框。这一切都很好,我这样做是这样的:

public void mouseMoved(MouseEvent e) {
Border border = BorderFactory.createLineBorder(Color.black);
JTextArea component = (JTextArea) e.getComponent();
component.setBorder(border);
}

我的问题是:当用户没有将鼠标悬停在 JTextArea 上时,我想删除边框。无论如何我可以做到这一点吗?我必须在 JPanel 中执行此操作还是可以在监听器类中执行此操作?您可以在这里看到,当我在 JPanel 上移动鼠标(但不在 JTextArea 上)时,边框保持不变:

enter image description here

import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseEvent;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.border.Border;
import javax.swing.event.MouseInputAdapter;

public class Editor {

public static void main(String[] args) {
JFrame frame = new Window();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(30, 30, 1000, 700);
frame.getContentPane().setBackground(Color.white);
frame.setVisible(true);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}

class Window extends JFrame {
MyPanel myPanel = new MyPanel();

private static final long serialVersionUID = 1L;

public Window() {
addMenus();
}

public void addMenus() {

getContentPane().add(myPanel);

setSize(300, 200);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}

class MyPanel extends JPanel {
private static final long serialVersionUID = 1L;
DragListener drag;

public MyPanel() {
drag = new DragListener();
addBox();
}

public void addBox() {
setLayout(new DragLayout());
drag = new DragListener();
JTextArea textArea2 = new JTextArea("Text Box Added");
textArea2.setLineWrap(true);
textArea2.setWrapStyleWord(true);
add(textArea2);
textArea2.addMouseListener(drag);
textArea2.addMouseMotionListener(drag);
repaint();
revalidate();
}

@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
}

public class DragListener extends MouseInputAdapter {
Point location;
MouseEvent pressed;

public void mousePressed(MouseEvent me) {
pressed = me;
}

public void mouseDragged(MouseEvent me) {
Component component = me.getComponent();
location = component.getLocation(location);
int x = location.x - pressed.getX() + me.getX();
int y = location.y - pressed.getY() + me.getY();
component.setLocation(x, y);
}

public void mouseMoved(MouseEvent e) {
Border border = BorderFactory.createLineBorder(Color.black);
JTextArea component = (JTextArea) e.getComponent();
component.setBorder(border);
}
}

}

最佳答案

使用 MouseListenerMouseEnteredMouseExited 事件,这会让您知道鼠标何时进入或离开您的组件

参见How to Write a Mouse Listener了解更多详情

关于java - 检测 JTextArea 上的悬停,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26707838/

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