gpt4 book ai didi

JavaFX检测场景外的鼠标移动

转载 作者:行者123 更新时间:2023-12-01 14:28:57 27 4
gpt4 key购买 nike

我正在尝试构建一个颜色选择器,用户可以在其中看到鼠标指针所在的 RGB 值。

问题是,当鼠标指针移出场景时,它不起作用。但是我使用了另一个 KeyTyped 事件并且工作正常。意思是,当鼠标在场景之外并且你按下任何按钮时,你可以看到鼠标指向的 RGB 值。

现在,

  1. 有什么方法可以在鼠标移动时使用 KeyTyped 事件吗?
  2. 有没有其他方法可以检测场景外的鼠标指向位置?

代码如下:

import java.awt.Color;
import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.Robot;
import javafx.application.Application;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

/*
* @author sapaythhossain
*/
public class ColorPicker extends Application {

private Stage window;
private Scene scene;
private double width;
private double height;
private String title;
private Label colorLabel;
private Label rgbLabel;
private Label htmlLabel;
private Label rgbValueLabel;
private Label htmlValueLabel;
private Label bValueLabel;

private int RGBr;
private int RGBg;
private int RGBb;

private Color currentColor;
private Robot robot;

@Override
public void start(Stage primaryStage) throws Exception {
title = "Color Picker";
width = 220;
height = 80;

robot = new Robot();

window = primaryStage;
window.setTitle(title);

colorLabel = new Label();
colorLabel.setWrapText(true);
colorLabel.setMinSize(50, 50);
colorLabel.setStyle(
"-fx-background-color: rgba(" + RGBr + "," + RGBg + "," + RGBb + ",1);"
);

VBox leftRow = new VBox(10);
leftRow.getChildren().addAll(colorLabel);

rgbLabel = new Label("RGB: ");
htmlLabel = new Label("HTML: ");

rgbValueLabel = new Label("");
htmlValueLabel = new Label("");
bValueLabel = new Label();

VBox middleRow = new VBox();
middleRow.getChildren().addAll(rgbLabel, htmlLabel);

VBox rightRow = new VBox();
rightRow.getChildren().addAll(rgbValueLabel, htmlValueLabel, bValueLabel);

HBox layout = new HBox(10);
layout.getChildren().addAll(leftRow, middleRow, rightRow);

EventHandler handler = (EventHandler) (Event event) -> {
changeColor();
};

scene = new Scene(layout, width, height);
scene.setOnMouseMoved(handler);
scene.setOnKeyTyped(handler);



window.setScene(scene);
window.show();
}

public void changeColor() {
Point p = MouseInfo.getPointerInfo().getLocation();
currentColor = robot.getPixelColor(p.x, p.y);

RGBr = currentColor.getRed();
RGBg = currentColor.getGreen();
RGBb = currentColor.getBlue();

String colorString = String.valueOf(RGBr) + ", "
+ String.valueOf(RGBg) + ", " + String.valueOf(RGBb);

colorLabel.setStyle(
"-fx-background-color: rgba(" + RGBr + "," + RGBg + "," + RGBb + ",1);"
);
String hex = String.format("#%02x%02x%02x", RGBr, RGBg, RGBb);
htmlValueLabel.setText(hex);
rgbValueLabel.setText(colorString);
}

public static void main(String[] args) {
launch(args);
}

}

提前致谢。

最佳答案

好的,您需要:

在您的类中实现 NativeMouseInputListener

然后你需要注册钩子(Hook):

private void createHook() {
try {
// here you starts the hook
GlobalScreen.registerNativeHook();
} catch (NativeHookException ex) {
//TODO Exception handling
}

// here you add the listener for the hook
GlobalScreen.addNativeMouseListener(this);
}

然后您需要选择鼠标事件并放入 getMousePointColor() 方法:

    @Override
public void nativeMouseClicked(NativeMouseEvent nme) {
}

@Override
public void nativeMousePressed(NativeMouseEvent nme) {
}

@Override
public void nativeMouseReleased(NativeMouseEvent nme) {
}

@Override
public void nativeMouseMoved(NativeMouseEvent nme) {
}

@Override
public void nativeMouseDragged(NativeMouseEvent nme) {
}

private void getMousePointColor() {
int xLocation = MouseInfo.getPointerInfo().getLocation().x;
int yLocation = MouseInfo.getPointerInfo().getLocation().y;
System.out.println("------------------------------------------------------");

Robot r;
try {
r = new Robot();
System.out.println(r.getPixelColor(xLocation, yLocation));
} catch (AWTException ex) {
//TODO Exception handling
}
System.out.println("------------------------------------------------------");
}

例如:

@Override
public void nativeMouseClicked(NativeMouseEvent nme) {
getMousePointColor();
}

JNative Hook Latest Version

JNative Hook Documention

关于JavaFX检测场景外的鼠标移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44539563/

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