gpt4 book ai didi

java - 更改光标以移交 JFrame 中的某些坐标

转载 作者:行者123 更新时间:2023-12-02 06:15:21 27 4
gpt4 key购买 nike

我有一个 boolean 值,当鼠标位于 JFrame 内的设定坐标内时,该 boolean 值会发生变化,然后我在运行方法中有一个 if ,以便我可以更改光标,但我无法找到如何更改光标的任何地方不使用列表或对象。如何在不使用 JFrame 以外的对象的情况下更改光标?

最佳答案

我不太确定为什么你需要“不”使用其他对象。如果您愿意使用像 JPanel 这样的东西,您的代码可能会变得非常简单。例如,您可以将 JPanel 添加到相关区域,然后设置一个光标以在每次光标进入或离开该 Swing 组件时进行识别。例如;

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


public class ExampleClass{

public static void main(String args[]){

JFrame exampleFrame = new JFrame("Test");
exampleFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
exampleFrame.setLayout(new FlowLayout());
exampleFrame.setSize(300, 300);

JPanel redPanel = new JPanel();
redPanel.setBackground(Color.RED);
redPanel.setPreferredSize(new Dimension(150, 300));
redPanel.setCursor(new Cursor(Cursor.HAND_CURSOR)); // This one line changes the cursor.

exampleFrame.add(redPanel);
exampleFrame.setVisible(true);
}
}

尽管完全有可能按照您的要求进行操作,但听起来似乎比查看结果所需的内容更加冗长/可读性较差。 JPanel 甚至不需要是不同的颜色,它可以对用户完全不可见(redPanel.setOpaque(false); 就可以了)。

运行上面的示例代码会显示一个带有中心红色方 block (JPanel redPanel)的 JFrame。将鼠标移到红色方 block 上会改变光标。

<小时/>

如果由于某种原因上述方法不切实际,或者您的程序设计已经按照这种方式进行了设置,您可以使用相对于您的 JFrame 的绝对坐标。为您的 JFrame 创建一个 MouseMotionListener,如下所示;

class CursorMouseMotionListener implements MouseMotionListener{

JFrame yourFrame;

CursorMouseMotionListener(JFrame yourFrame){
this.yourFrame = yourFrame;
}

@Override
public void mouseDragged(MouseEvent e) {
// Do nothing.
}
/// The important bit below
@Override
public void mouseMoved(MouseEvent e) {
if(e.getPoint().x >= 50 && e.getPoint().x <=150 && e.getPoint().y >= 50 && e.getPoint().y <=150){
yourFrame.setCursor(new Cursor(Cursor.HAND_CURSOR));
}
else{
yourFrame.setCursor(new Cursor(Cursor.MOVE_CURSOR));
}
}

}

然后将其添加到您的 JFrame 中,如下所示;

frame.addMouseMotionListener(new CursorMouseMotionListener(frame));

当然,您必须更改坐标以匹配按钮的位置,但这样就可以了。如果你能避免的话,我仍然不建议使用这种方法。最好使用您可以使用的 Swing 组件。但如果您绝对需要使用当前的程序,那么这应该可行。

关于java - 更改光标以移交 JFrame 中的某些坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21548588/

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