- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 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/
我是一名优秀的程序员,十分优秀!