메뉴와 관련된 몇 가지 JavaFX 클래스를 살펴 보았지만 원하는 것을 찾을 수 없었습니다. MenuBar
처럼 작동하는 것을 구현하고 싶습니다. 다만, 클릭 할 때가 아니라 마우스를 올리면 메뉴가 열리기를 원합니다. 혼자서 처음부터 무언가를 만들 수는 있지만, 이미 비슷한 것을 할 수있는 무언가가 있다면 시간 낭비 일 것입니다. 아무도 그걸 어떻게 알 수 있습니까?JavaFX에서 완전히 호버를 트리거하는 메뉴는 무엇입니까?
0
A
답변
0
난 당신이 클래스 javafx.scene.control.ContextMenu
및 방법을 찾고 있다고 생각 show(Node anchor, double screenX, double screenY)
+0
하지만 메인 윈도우의 장면 그래프에 컨텍스트 메뉴가 필요합니다. – Jai
1
글쎄 그것은 당신이 lookup()
을 사용하는 경우 그것을 만들 수 있습니다. 메뉴가 들어있는 컨테이너를 쉽게 가져 와서 setOnMouseEntered()
또는 setOnMouseExited()
을 적용하여 각 메뉴에서 마우스 이벤트를 포착 할 수 있습니다.
import javafx.application.Application;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
BorderPane mainPane = new BorderPane();
MenuBar menuBar = new MenuBar();
Menu editMenu = new Menu("File");
MenuItem fileMenuItem1 = new MenuItem("Item 1");
MenuItem fileMenuItem2 = new MenuItem("Item 2");
MenuItem fileMenuItem3 = new MenuItem("Item 3");
editMenu.getItems().addAll(fileMenuItem1, fileMenuItem2, fileMenuItem3);
Menu fileMenu = new Menu("Edit");
MenuItem fileMenu1 = new MenuItem("Item 1");
MenuItem fileMenu2 = new MenuItem("Item 2");
MenuItem fileMenu3 = new MenuItem("Item 3");
fileMenu.getItems().addAll(fileMenu1, fileMenu2, fileMenu3);
menuBar.getMenus().addAll(editMenu, fileMenu);
mainPane.setTop(menuBar);
Scene scene = new Scene(mainPane, 300, 300);
Stage stage = new Stage();
stage.setScene(scene);
stage.show();
// Find menubar HBox holding the menus
HBox container = (HBox) menuBar.lookup("HBox");
for(int i = 0 ; i < container.getChildren().size() ; i++) {
Node parentNode = container.getChildren().get(i);
Menu menu = menuBar.getMenus().get(i);
parentNode.setOnMouseMoved(e->{
menu.show();
});
}
}
public static void main(String[] args) {
launch(args);
}
}
내가 대신 setOnMouseEntered
의 setOnMouseMoved
을 사용하는 이유 당신은 궁금 할 것이다 : 여기
setOnMouseEntered
은 메뉴 사이에서 마우스를 움직이는 동안 이상한 행동을하고
setOnMouseMoved
의 사용법이 수정되기 때문입니다.
[[email protected][styleClass=menu-bar], [email protected][styleClass=container], MenuBarSkin$MenuBarButton[id=null, styleClass=menu-button menu]'File', [email protected][styleClass=label]'File', Text[text="File", x=0.0, y=0.0, alignment=LEFT, origin=BASELINE, boundsType=LOGICAL_VERTICAL_CENTER, font=Font[name=System Regular, family=System, style=Regular, size=12.0], fontSmoothingType=LCD, fill=0x333333ff], [email protected][styleClass=arrow-button], [email protected][styleClass=arrow], MenuBarSkin$MenuBarButton[id=null, styleClass=menu-button menu]'Edit', [email protected][styleClass=label]'Edit', Text[text="Edit", x=0.0, y=0.0, alignment=LEFT, origin=BASELINE, boundsType=LOGICAL_VERTICAL_CENTER, font=Font[name=System Regular, family=System, style=Regular, size=12.0], fontSmoothingType=LCD, fill=0x333333ff], [email protected][styleClass=arrow-button], [email protected][styleClass=arrow]]
를 사용하여 사용자 정의'MenuBar'와 그 청취자를 변경 : 당신은 내가
lookup("HBox")
진실을 사용하는 알지 못했다 궁금 경우 또한내 첫 번째 시도는 나에게 현재의 정보를 준
System.out.println(menuBar.lookupAll("*"));
했다입니까? – user1803551['ControlsFX'] (http://fxexperience.com/controlsfx/) – Sedrick