是否可以滚动JavaFX菜单栏
我想将javafx.scene.control.MenuBar添加到AnchorPane中。 菜单项的数量是灵活的。用户可以在菜单栏中添加一个或多个条目。 如果我只在菜单栏中使用几个菜单项,那么就有足够的水平位置是否可以滚动JavaFX菜单栏,javafx,menubar,scrollable,Javafx,Menubar,Scrollable,我想将javafx.scene.control.MenuBar添加到AnchorPane中。 菜单项的数量是灵活的。用户可以在菜单栏中添加一个或多个条目。 如果我只在菜单栏中使用几个菜单项,那么就有足够的水平位置 MenuBar menuBar = new MenuBar(); Menu menuFile = new Menu("File"); Menu menuEdit = new Menu("Edit"); Menu menuView = new Menu("View"); menuBar.
MenuBar menuBar = new MenuBar();
Menu menuFile = new Menu("File");
Menu menuEdit = new Menu("Edit");
Menu menuView = new Menu("View");
menuBar.getMenus().addAll(menuFile, menuEdit, menuView);
但如果有超过几个条目和一些较长的条目,则没有足够的位置。
这不是正常情况,但有些用户希望添加更多菜单项。菜单项的最大数量将限制为10个条目
MenuBar menuBar = new MenuBar();
Menu menu1 = new Menu("Long first menu");
Menu menu2 = new Menu("My second long entry");
Menu menu3 = new Menu("another long entry");
Menu menu4 = new Menu("Long menu 4");
Menu menu5 = new Menu("My fifth long entry");
Menu menu6 = new Menu("another long long entry");
menuBar.getMenus().addAll(menu1, menu2, menu3, menu4, menu5, menu6);
我的对话框不能调整大小。所有菜单都必须在菜单栏的一行中。
这是一个GUI设计决策
我想有一个可滚动菜单栏的解决方案。
如果此解决方案绝对不可能,下一个解决方案可能是减少所有菜单中显示的字符数。
e、 g.:|长枞树…|我的第二个…|另一个…|。。。
但我更喜欢第一种解决方案
减少所有菜单中显示的字符数。e、 g.:|长枞树…|我的第二个…|另一个…|
这是放置在可调整大小窗格中的菜单栏的默认行为
下面是一些使用长菜单示例的示例代码
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.stage.Stage;
public class ElidedMenu extends Application {
@Override public void start(Stage stage) {
MenuBar menuBar = new MenuBar();
Menu menu1 = new Menu("Long first menu");
Menu menu2 = new Menu("My second long entry");
Menu menu3 = new Menu("another long entry");
Menu menu4 = new Menu("Long menu 4");
Menu menu5 = new Menu("My fifth long entry");
Menu menu6 = new Menu("another long long entry");
menuBar.getMenus().addAll(menu1, menu2, menu3, menu4, menu5, menu6);
StackPane stack = new StackPane();
stack.getChildren().add(new Label("Hello World!"));
VBox layout = new VBox();
layout.getChildren().addAll(menuBar, stack);
VBox.setVgrow(stack, Priority.ALWAYS);
stage.setScene(new Scene(layout, 500, 250));
stage.setResizable(false);
stage.show();
}
public static void main(String[] args) { launch(args); }
}
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.stage.Stage;
public class ScrollingMenu extends Application {
@Override public void start(Stage stage) {
MenuBar menuBar = new MenuBar();
Menu menu1 = new Menu("Long first menu");
Menu menu2 = new Menu("My second long entry");
Menu menu3 = new Menu("another long entry");
Menu menu4 = new Menu("Long menu 4");
Menu menu5 = new Menu("My fifth long entry");
Menu menu6 = new Menu("another long long entry");
menuBar.getMenus().addAll(menu1, menu2, menu3, menu4, menu5, menu6);
ScrollPane scrollingMenu = new ScrollPane();
scrollingMenu.setContent(menuBar);
StackPane stack = new StackPane();
stack.getChildren().add(new Label("Hello World!"));
VBox layout = new VBox();
layout.getChildren().addAll(scrollingMenu, stack);
VBox.setVgrow(stack, Priority.ALWAYS);
stage.setScene(new Scene(layout, 500, 250));
stage.setResizable(false);
stage.show();
scrollingMenu.setPrefSize(stage.getScene().getWidth(), menuBar.getHeight());
}
public static void main(String[] args) { launch(args); }
}
示例代码的输出为:
具有可滚动菜单栏的解决方案 将菜单栏包装在滚动窗格中,使其可滚动 下面是一些使用长菜单示例的示例代码
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.stage.Stage;
public class ElidedMenu extends Application {
@Override public void start(Stage stage) {
MenuBar menuBar = new MenuBar();
Menu menu1 = new Menu("Long first menu");
Menu menu2 = new Menu("My second long entry");
Menu menu3 = new Menu("another long entry");
Menu menu4 = new Menu("Long menu 4");
Menu menu5 = new Menu("My fifth long entry");
Menu menu6 = new Menu("another long long entry");
menuBar.getMenus().addAll(menu1, menu2, menu3, menu4, menu5, menu6);
StackPane stack = new StackPane();
stack.getChildren().add(new Label("Hello World!"));
VBox layout = new VBox();
layout.getChildren().addAll(menuBar, stack);
VBox.setVgrow(stack, Priority.ALWAYS);
stage.setScene(new Scene(layout, 500, 250));
stage.setResizable(false);
stage.show();
}
public static void main(String[] args) { launch(args); }
}
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.stage.Stage;
public class ScrollingMenu extends Application {
@Override public void start(Stage stage) {
MenuBar menuBar = new MenuBar();
Menu menu1 = new Menu("Long first menu");
Menu menu2 = new Menu("My second long entry");
Menu menu3 = new Menu("another long entry");
Menu menu4 = new Menu("Long menu 4");
Menu menu5 = new Menu("My fifth long entry");
Menu menu6 = new Menu("another long long entry");
menuBar.getMenus().addAll(menu1, menu2, menu3, menu4, menu5, menu6);
ScrollPane scrollingMenu = new ScrollPane();
scrollingMenu.setContent(menuBar);
StackPane stack = new StackPane();
stack.getChildren().add(new Label("Hello World!"));
VBox layout = new VBox();
layout.getChildren().addAll(scrollingMenu, stack);
VBox.setVgrow(stack, Priority.ALWAYS);
stage.setScene(new Scene(layout, 500, 250));
stage.setResizable(false);
stage.show();
scrollingMenu.setPrefSize(stage.getScene().getWidth(), menuBar.getHeight());
}
public static void main(String[] args) { launch(args); }
}
示例代码的输出为:
减少所有菜单中显示的字符数。e、 g.:|长枞树…|我的第二个…|另一个…|
这是放置在可调整大小窗格中的菜单栏的默认行为
下面是一些使用长菜单示例的示例代码
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.stage.Stage;
public class ElidedMenu extends Application {
@Override public void start(Stage stage) {
MenuBar menuBar = new MenuBar();
Menu menu1 = new Menu("Long first menu");
Menu menu2 = new Menu("My second long entry");
Menu menu3 = new Menu("another long entry");
Menu menu4 = new Menu("Long menu 4");
Menu menu5 = new Menu("My fifth long entry");
Menu menu6 = new Menu("another long long entry");
menuBar.getMenus().addAll(menu1, menu2, menu3, menu4, menu5, menu6);
StackPane stack = new StackPane();
stack.getChildren().add(new Label("Hello World!"));
VBox layout = new VBox();
layout.getChildren().addAll(menuBar, stack);
VBox.setVgrow(stack, Priority.ALWAYS);
stage.setScene(new Scene(layout, 500, 250));
stage.setResizable(false);
stage.show();
}
public static void main(String[] args) { launch(args); }
}
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.stage.Stage;
public class ScrollingMenu extends Application {
@Override public void start(Stage stage) {
MenuBar menuBar = new MenuBar();
Menu menu1 = new Menu("Long first menu");
Menu menu2 = new Menu("My second long entry");
Menu menu3 = new Menu("another long entry");
Menu menu4 = new Menu("Long menu 4");
Menu menu5 = new Menu("My fifth long entry");
Menu menu6 = new Menu("another long long entry");
menuBar.getMenus().addAll(menu1, menu2, menu3, menu4, menu5, menu6);
ScrollPane scrollingMenu = new ScrollPane();
scrollingMenu.setContent(menuBar);
StackPane stack = new StackPane();
stack.getChildren().add(new Label("Hello World!"));
VBox layout = new VBox();
layout.getChildren().addAll(scrollingMenu, stack);
VBox.setVgrow(stack, Priority.ALWAYS);
stage.setScene(new Scene(layout, 500, 250));
stage.setResizable(false);
stage.show();
scrollingMenu.setPrefSize(stage.getScene().getWidth(), menuBar.getHeight());
}
public static void main(String[] args) { launch(args); }
}
示例代码的输出为:
具有可滚动菜单栏的解决方案 将菜单栏包装在滚动窗格中,使其可滚动 下面是一些使用长菜单示例的示例代码
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.stage.Stage;
public class ElidedMenu extends Application {
@Override public void start(Stage stage) {
MenuBar menuBar = new MenuBar();
Menu menu1 = new Menu("Long first menu");
Menu menu2 = new Menu("My second long entry");
Menu menu3 = new Menu("another long entry");
Menu menu4 = new Menu("Long menu 4");
Menu menu5 = new Menu("My fifth long entry");
Menu menu6 = new Menu("another long long entry");
menuBar.getMenus().addAll(menu1, menu2, menu3, menu4, menu5, menu6);
StackPane stack = new StackPane();
stack.getChildren().add(new Label("Hello World!"));
VBox layout = new VBox();
layout.getChildren().addAll(menuBar, stack);
VBox.setVgrow(stack, Priority.ALWAYS);
stage.setScene(new Scene(layout, 500, 250));
stage.setResizable(false);
stage.show();
}
public static void main(String[] args) { launch(args); }
}
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.stage.Stage;
public class ScrollingMenu extends Application {
@Override public void start(Stage stage) {
MenuBar menuBar = new MenuBar();
Menu menu1 = new Menu("Long first menu");
Menu menu2 = new Menu("My second long entry");
Menu menu3 = new Menu("another long entry");
Menu menu4 = new Menu("Long menu 4");
Menu menu5 = new Menu("My fifth long entry");
Menu menu6 = new Menu("another long long entry");
menuBar.getMenus().addAll(menu1, menu2, menu3, menu4, menu5, menu6);
ScrollPane scrollingMenu = new ScrollPane();
scrollingMenu.setContent(menuBar);
StackPane stack = new StackPane();
stack.getChildren().add(new Label("Hello World!"));
VBox layout = new VBox();
layout.getChildren().addAll(scrollingMenu, stack);
VBox.setVgrow(stack, Priority.ALWAYS);
stage.setScene(new Scene(layout, 500, 250));
stage.setResizable(false);
stage.show();
scrollingMenu.setPrefSize(stage.getScene().getWidth(), menuBar.getHeight());
}
public static void main(String[] args) { launch(args); }
}
示例代码的输出为: