나는 java (fx)의 초보자입니다.
JavaFX에서 x 및 y로 마우스 위치를 얻는 방법은 무엇입니까? 내가 AWT의 MouseInfo
(또한 가져온)을 사용하여 시도했지만 작동하지 않습니다. Ensemble에서 코드를 보았습니다. ("고급 스테이지"에서 볼 윈도우를 드래그하여, 내가해야 할 일은, 꾸며지지 않은 JavaFX 스테이지를 드래그합니다.)하지만 작동하지 않습니다. 나는 컨트롤러와 함께 FXML을 사용하고 있으며 이것이 주요 문제라고 생각한다. 단일 파일의 간단한 JavaFX로 다시 전환해야합니까? 나는 FXML이 UI를 배치하는 것이 더 낫다는 것을 알고 있지만, 많은 코드를 사용할 수는 없다. 아니면 컨트롤러에 다른 종류의 코드가 필요합니까? 가능한 모든 의견을 적어주십시오.
검사 할 때 약간의 코드가 필요하면 언제든지 물어보십시오.JavaFX에서 마우스의 위치를 얻는 방법은 무엇입니까?
답변
그 목적으로 로봇을 사용하는 것은 어떻습니까?
http://docs.oracle.com/javase/1.5.0/docs/api/java/awt/Robot.html
로봇을 사용하면, AWT 이벤트 큐에 이벤트를 게시 다르다. 이벤트는 기본 이벤트 대기열에서 생성됩니다. 실제로 Robot.mouseMove
으로 마우스 위치를 설정할뿐만 아니라 위치를 알 수 있습니다.
, 당신은 그것은 작동하지 않습니다 MouseInfo
import java.awt.MouseInfo;
// get the mouse's position
Point p = MouseInfo.getPointerInfo().getLocation();
에 충실 할 수 있습니다 : 당신은 Mac에서입니까? 어떤 JavaFX 버전입니까? FX8에서 수정 된 문제 인 것 같습니다. 오직 맥의 경우,
com.sun.glass.ui.Robot robot =
com.sun.glass.ui.Application.GetApplication().createRobot();
// getPosition of the mouse in Mac
int x = robot.getMouseX();
int y = robot.getMouseY();
귀하의 질문에 몇 가지 항목이 있습니다 사용할 수 있습니다 - 나는 한 번에 하나씩 해결할 수 있습니다.
는 당신이 마우스의 위치를 추적 할 적절한 자바 FX 구성 요소에 마우스 이벤트 핸들러를 추가합니다. 자바 FX 마우스 이벤트는 좌표의 여러 종류를보고합니다. x 및 y 좌표는 위치가 모니터되는 노드의 왼쪽 위 모서리를 기준으로합니다. sceneX 및 sceneY 좌표는 장면의 왼쪽 상단 0,0 좌표에 상대적입니다. screenX 및 screenY 좌표는 현재 화면의 왼쪽 상단 0,0 좌표를 기준으로합니다.JavaFX에서 x 및 y로 마우스 위치를 얻는 방법은 무엇입니까?
이 좌표는 MouseEvent 문서에 설명되어 있습니다. Node 및 Scene 설명서에는 좌표 시스템을 이해하는 데 추가 정보가 있습니다.
import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.event.*;
import javafx.scene.*;
import javafx.scene.control.*;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.VBox;
import javafx.stage.*;
public class MouseLocationReporter extends Application {
private static final String OUTSIDE_TEXT = "Outside Label";
public static void main(String[] args) { launch(args); }
@Override public void start(final Stage stage) {
final Label reporter = new Label(OUTSIDE_TEXT);
Label monitored = createMonitoredLabel(reporter);
VBox layout = new VBox(10);
layout.setStyle("-fx-background-color: cornsilk; -fx-padding: 10px;");
layout.getChildren().setAll(
monitored,
reporter
);
layout.setPrefWidth(500);
stage.setScene(
new Scene(layout)
);
stage.show();
}
private Label createMonitoredLabel(final Label reporter) {
final Label monitored = new Label("Mouse Location Monitor");
monitored.setStyle("-fx-background-color: forestgreen; -fx-text-fill: white; -fx-font-size: 20px;");
monitored.setOnMouseMoved(new EventHandler<MouseEvent>() {
@Override public void handle(MouseEvent event) {
String msg =
"(x: " + event.getX() + ", y: " + event.getY() + ") -- " +
"(sceneX: " + event.getSceneX() + ", sceneY: " + event.getSceneY() + ") -- " +
"(screenX: " + event.getScreenX()+ ", screenY: " + event.getScreenY() + ")";
reporter.setText(msg);
}
});
monitored.setOnMouseExited(new EventHandler<MouseEvent>() {
@Override public void handle(MouseEvent event) {
reporter.setText(OUTSIDE_TEXT);
}
});
return monitored;
}
}
나는 (또한 수입) AWT의의 MouseInfo를 사용했지만, 제대로 동작하지 않습니다.
금지하지 마세요. 다양한 그래픽 툴킷 (예 : Swing/AWT 및 JavaFX)을 혼합하면 고급 주제가됩니다. 일반적으로 JavaFX 응용 프로그램을 작성하는 경우 java.awt
네임 스페이스와 javax.swing
네임 스페이스에서 가져 오는 것은 사용하지 마십시오. JavaFX 응용 프로그램과 상호 작용할 필요가있는 대규모의 기존 Swing 기반 응용 프로그램이나 프레임 워크가있는 경우에만 사용해야합니다. 이 경우에는 그런 상황이 발생하지 않습니다.
는 또한 ("고급 단계"에서 볼 창을 드래그하면, 즉 내가 할 내 장식되지 않은 자바 FX 단계를 드래그 필요하다고),하지만 그것도 작동하지 않습니다 앙상블에 대한 코드를 보았다.
나는 Ensemble Advanced Stage 샘플을 시도해 보았고 그 스테이지를 드래그하여 저를 위해 일했습니다.
장식되지 않은 스테이지를 JavaFX에서 드래그하는 또 다른 샘플은 How to draw a clock with JavaFX 2?에 대한 답변이며 associated sample code입니다. 내가 컨트롤러와 FXML을 사용하고
/** makes a stage draggable using a given node */
public static void makeDraggable(final Stage stage, final Node byNode) {
final Delta dragDelta = new Delta();
byNode.setOnMousePressed(new EventHandler<MouseEvent>() {
@Override public void handle(MouseEvent mouseEvent) {
// record a delta distance for the drag and drop operation.
dragDelta.x = stage.getX() - mouseEvent.getScreenX();
dragDelta.y = stage.getY() - mouseEvent.getScreenY();
byNode.setCursor(Cursor.MOVE);
}
});
byNode.setOnMouseReleased(new EventHandler<MouseEvent>() {
@Override public void handle(MouseEvent mouseEvent) {
byNode.setCursor(Cursor.HAND);
}
});
byNode.setOnMouseDragged(new EventHandler<MouseEvent>() {
@Override public void handle(MouseEvent mouseEvent) {
stage.setX(mouseEvent.getScreenX() + dragDelta.x);
stage.setY(mouseEvent.getScreenY() + dragDelta.y);
}
});
byNode.setOnMouseEntered(new EventHandler<MouseEvent>() {
@Override public void handle(MouseEvent mouseEvent) {
if (!mouseEvent.isPrimaryButtonDown()) {
byNode.setCursor(Cursor.HAND);
}
}
});
byNode.setOnMouseExited(new EventHandler<MouseEvent>() {
@Override public void handle(MouseEvent mouseEvent) {
if (!mouseEvent.isPrimaryButtonDown()) {
byNode.setCursor(Cursor.DEFAULT);
}
}
});
}
, 나는 그 주요 문제 같아요 : 시계 샘플에 대한 장식되지 않은 단계 드래그하기 위해 사용하는 방법이다. 단일 파일의 간단한 JavaFX로 다시 전환해야합니까? 나는 FXML이 UI를 배치하는 것이 더 낫다는 것을 알고 있지만, 많은 코드를 사용할 수는 없다.
기본 JavaFX API에 대한 이해가 부족하고 익숙하지 않은 것이 FXML을 사용하는 것이 아닌 주요 문제 일 수 있습니다. 그러나 fxml의 복잡성은 더 가벼운 문서와 함께 웹상의 샘플이 귀하의 고난에 기여할 수 있음을 의미합니다. FXML을 사용하여 일부 JavaFX 기능을 작동시키는 방법을 이해하는 것이 어려워지면 지금은 FXML 사용을 중단하는 것이 좋습니다. Java API를 사용하여 로직을 직접 코딩하고, 어려운 문제가 발생하면 Oracle JavaFX tutorials 및 Ensemble sample code을 참조하십시오.
JavaFX API에 직접 코딩하는 것이 편한 경우 많은 GUI 요소가 포함 된 더 큰 프로젝트의 경우 FXML을 사용하도록 다시 전환하십시오. FXML 요소와 속성 자체는 표준 JavaFX API를 반영 할 때 거의 완벽하게 구현됩니다. 따라서 핵심 JavaFX API를 이해한다면 FXML에 대한 거의 모든 것을 이해할 수 있습니다.
이 답변에 대한 후속 의견을 게시하지 마십시오.이 답변은 그대로입니다. 새로운 질문이있는 경우 새로운 질문 (질문 당 하나의 질문)을 만드십시오.
당신은 멋진 Sir Jewelsea입니다. (항상 여분의 마일을 보내고 있습니다.) 감사합니다. – Elltz
@jewelsea는 Windows 8과 같은 메뉴를 보여주기 위해이 트릭을 사용할 수 있습니까? (마우스가 구석으로 오면 평균 쇼 메뉴) – UnKnown
@UnKnown 아니오, 할 수 없습니다. 마우스 이벤트는 장면으로 만 전달 될 수 있습니다. 전체 화면 응용 프로그램이있는 경우 응용 프로그램에서이를 수행 할 수 있지만 응용 프로그램이 윈도우로 표시되거나 최소화되어 있고 마우스 기반 메뉴 만 표시하려는 경우 화면의 구석으로 이동하면 할 수 없습니다. 어떻게할지는 모르겠지만, 새로운 질문을 만들 수 있습니다. – jewelsea
JavaFx 8 WindowEvent는 불행히도 마우스의 (x, y) 위치를 제공하지 않습니다. 나는이 같은 AWT의 MouseInfo를 사용하여 (그리고 잘 작동)이 해결 :
Tooltip t = new Tooltip();
Tooltip.install(yournode, t);
t.setOnShowing(ev -> {// called just prior to being shown
Point mouse = java.awt.MouseInfo.getPointerInfo().getLocation();
Point2D local = yournode.screenToLocal(mouse.x, mouse.y);
// my app-specific code to get the chart's yaxis value
// then set the text as I want
double pitch = yaxis.getValueForDisplay(local.getY()).doubleValue();
double freq = AudioUtil.pitch2frequency(pitch);
t.setText(String.format("Pitch %.1f: %.1f Hz %.1f samples", pitch, freq, audio.rate/freq));
});
- 1. matlab에서 내 설정 축에서 마우스의 위치를 얻는 방법은 무엇입니까?
- 2. JavaFX에서 타자기 효과를 얻는 방법은 무엇입니까?
- 3. JFrame 외부에서 마우스의 위치를 찾으십니까?
- 4. JavaScript : div 상자에서 마우스의 위치를 찾는 방법은 무엇입니까?
- 5. 대화 상자에서 마우스의 위치를 계속 벗어나는 방법은 무엇입니까? (MFC)
- 6. 응용 프로그램 창에서 마우스의 위치를 가져 오거나 설정하는 방법은 무엇입니까?
- 7. PySDL2를 사용하여 마우스 위치를 얻는 방법은 무엇입니까?
- 8. 경로 위치를 얻는 방법은 무엇입니까?
- 9. (Linux) 마우스의 초기 위치를 얻거나 C없이 x없이 커서 위치를 설정하는 방법은 무엇입니까?
- 10. NetBeans 비주얼 라이브러리에서 마우스 위치를 얻는 방법은 무엇입니까?
- 11. javafx에서 현재 화면 세부 정보를 얻는 방법은 무엇입니까?
- 12. javaFX에서 KeyPress 이벤트로 부드러운 애니메이션을 얻는 방법은 무엇입니까?
- 13. TableView JavaFX에서 TableCell의 X 및 Y 좌표를 얻는 방법은 무엇입니까?
- 14. three.js에서 정점의 절대 위치를 얻는 방법은 무엇입니까?
- 15. FragmentPagerAdapter에서 현재 위치를 얻는 방법은 무엇입니까?
- 16. 사용자 정의 컨트롤의 위치를 얻는 방법은 무엇입니까?
- 17. GraphApi에서 게시물의 위치를 얻는 방법은 무엇입니까?
- 18. 좌표의 경로 일치 위치를 얻는 방법은 무엇입니까?
- 19. intentService에서 장치 위치를 얻는 방법은 무엇입니까?
- 20. 더 정확한 GPS 위치를 얻는 방법은 무엇입니까?
- 21. Mootools에서 div의 위치를 얻는 방법은 무엇입니까?
- 22. NSLog에서 MapView의 현재 위치를 얻는 방법은 무엇입니까?
- 23. tinymce에서 현재 블록 위치를 얻는 방법은 무엇입니까?
- 24. StackPanel에서 요소의 위치를 얻는 방법은 무엇입니까?
- 25. 요소 위치를 얻는 정확한 방법은 무엇입니까?
- 26. 에뮬레이터에서 현재 고정 위치를 얻는 방법은 무엇입니까?
- 27. PC에서 내 휴대폰의 위치를 얻는 방법은 무엇입니까?
- 28. RecyclerView.Adapter에서 카드 위치를 얻는 방법은 무엇입니까?
- 29. UnicodeDecodeError가 발생한 위치를 얻는 방법은 무엇입니까?
- 30. objective-c에서 파일의 위치를 얻는 방법은 무엇입니까?
나는 윈도우 8 64 오전, 자바 FX 2 (JDK의 v7u21). 나는 어제 jdk 8을 다운로드하고 있었다. 그러나 나의 어리석은 그물은 그 다음 죽었다. –
Windows에서이 로봇을 사용할 수 있습니까? (테스트 자동화 전용입니까, 아니면 현실 세계에서 사용할 수 있습니까?) MouseInfo와 Point가 작동하지만 x와 y를 함께 제공합니다 (java.awt.Point [x = 449, y = 323]). 그렇게하는 방법? –
예. awt.point : 두 개의 필드 x와 y를 가지고 있습니다 – octoback