gpt4 book ai didi

java - 如何动态设置代号一中 SideMenuBar 的可见性?

转载 作者:行者123 更新时间:2023-11-30 07:42:48 25 4
gpt4 key购买 nike

使用 codenameone 中的 Toolbar 类,如何动态设置 SideMenuBar 的可见性?

我正在使用 WebBrowser 组件,并且我只希望登录后可以访问 SideMenu。

当我只是在 SideMenuBar 上放置命令时(方法 1),我实现了我想要的行为,但现在我已经切换到使用 Toolbar 类来获得 LnF 的优势(方法 2),hideLeftSideMenuBool 主题常量似乎没有被观察到。

//METHOD 1
//CHANGING THE THEME DYNAMICALLY HIDES THE SIDEMENUBAR WHEN I'VE SIMPLY
//ADDED COMMANDS LIKE THIS
current.addCommand(new Command("Home") {
{
putClientProperty("place", "side");
}
});

//METHOD 2
//CHANGING THE THEME DYNAMICALLY DOES NOT HIDE THE SIDEMENUBAR WHEN I'VE
//USED toolbar.addComponentToSideMenu TO ADD BUTTONS WITH COMMANDS
toolbar = new Toolbar();
current.setToolbar(toolbar);
Button home = new Button("Home");
toolbar.addComponentToSideMenu(home, new Command("Home"){

@Override
public void actionPerformed(ActionEvent evt) {
wb.setURL(startURL);
}
});

...

//I USED THE FOLLOWING CODE TO DYNAMICALLY SET THE THEME AFTER EVALUATING A
//WebBrowser URI REGARDLESS OF WHICH METHOD WAS USED TO ADD COMMANDS
wb.setBrowserNavigationCallback(new BrowserNavigationCallback() {
public boolean shouldNavigate(String url) {
if ((url.indexOf("users/login") != -1)) {
try {
//theme_noside.res has hideLeftSideMenuBool set to true
theme = Resources.openLayered("/theme_noside");
UIManager.getInstance().setThemeProps(theme.getTheme(theme.getThemeResourceNames()[0]));
UIManager.getInstance().getLookAndFeel().setMenuBarClass(SideMenuBar.class);
Display.getInstance().setCommandBehavior(Display.COMMAND_BEHAVIOR_SIDE_NAVIGATION);
current.refreshTheme();
}catch(IOException e){
Log.p(e.toString());
}
}
else {
try {
//theme.res has hideLeftSideMenuBool set to false
theme = Resources.openLayered("/theme");
UIManager.getInstance().setThemeProps(theme.getTheme(theme.getThemeResourceNames()[0]));
UIManager.getInstance().getLookAndFeel().setMenuBarClass(SideMenuBar.class);
Display.getInstance().setCommandBehavior(Display.COMMAND_BEHAVIOR_SIDE_NAVIGATION);
current.refreshTheme();
}catch(IOException e){
Log.p(e.toString());
}
}
return true;
}
});

最佳答案

仅使用 Toolbar api,无需调用或更改任何主题常量。

将工具栏设为最终工具栏或在 beforeShow() 方法外部声明它,以便您可以在内部方法 shouldNavigate(String url) 中访问它。

您需要做的就是调用removeAll(),然后重置标题并添加您想要的组件。如果工具栏没有命令或标题,则默认隐藏。

wb.setBrowserNavigationCallback(new BrowserNavigationCallback() {
public boolean shouldNavigate(String url) {
if ((url.indexOf("users/login") != -1)) {
toolbar.removeAll();
toolbar.setTitleComponent(new Label("My Form", "Title"));
toolbar.getComponentForm().revalidate();
} else {
//Do nothing, since I've already add the commands I want earlier
}
return true;
}
});

关于java - 如何动态设置代号一中 SideMenuBar 的可见性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34424905/

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