Menu JavaFX菜单栏中的右对齐菜单
在Menu JavaFX菜单栏中的右对齐菜单,menu,javafx-8,Menu,Javafx 8,在Java Swing中,可以使用以下命令将菜单放置在菜单栏的右侧: menubar.add(menu1); menubar.add(Box.createHorizontalGlue()); menubar.add(menu2); 这将使menu1位于左侧,而menu2位于右侧。该函数(显然)在JavaFX中不可用 在JavaFX中,我看到工具栏也可以通过以下方式实现: final Pane rightSpacer = new Pane(); HBox.setHgrow( rightS
Java Swing
中,可以使用以下命令将菜单放置在菜单栏的右侧:
menubar.add(menu1);
menubar.add(Box.createHorizontalGlue());
menubar.add(menu2);
这将使menu1
位于左侧,而menu2
位于右侧。该函数(显然)在JavaFX
中不可用
在JavaFX
中,我看到工具栏也可以通过以下方式实现:
final Pane rightSpacer = new Pane();
HBox.setHgrow(
rightSpacer,
Priority.SOMETIMES
);
尽管如此,此解决方法不适用于菜单
问题:是否有方法为
JavaFX
中的菜单创建正确的间隔?您可以在JavaFX中嵌入swing。这方面的一个例子是
import javafx.application.Application;
import javafx.embed.swing.SwingNode;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import javax.swing.JButton;
import javax.swing.SwingUtilities;
public class SwingFx extends Application {
@Override
public void start (Stage stage) {
final SwingNode swingNode = new SwingNode();
createSwingContent(swingNode);
StackPane pane = new StackPane();
pane.getChildren().add(swingNode);
stage.setTitle("Swing in JavaFX");
stage.setScene(new Scene(pane, 250, 150));
stage.show();
}
private void createSwingContent(final SwingNode swingNode) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
swingNode.setContent(new JButton("Click me!"));
}
});
}
}
因此,您可能希望将JButton()替换为要嵌入的内容
(代码片段摘自)一种略显粗俗的方法是在
HBox
中使用两个菜单栏。通过添加菜单栏
样式类,可以为分隔它们的间隔符提供与菜单栏相同的样式:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.scene.layout.Region;
import javafx.stage.Stage;
public class MenuAlignment extends Application {
@Override
public void start(Stage primaryStage) {
MenuBar leftBar = new MenuBar();
leftBar.getMenus().addAll(new Menu("File"), new Menu("Edit"));
MenuBar rightBar = new MenuBar();
rightBar.getMenus().addAll(new Menu("Help"));
Region spacer = new Region();
spacer.getStyleClass().add("menu-bar");
HBox.setHgrow(spacer, Priority.SOMETIMES);
HBox menubars = new HBox(leftBar, spacer, rightBar);
BorderPane root = new BorderPane();
root.setTop(menubars);
Scene scene = new Scene(root, 600, 600);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
这种方法的一个潜在缺点是,您不能将其用作菜单。缺点是,如果按Alt键,两个菜单栏中的菜单都会高亮显示。