Codename One Back 命令在左边,菜单在右边
Codename One Back Command on left and Menu on Right
我正在尝试在代号 one 中制作一个应用程序,我想在屏幕顶部的右侧创建一个手汉堡菜单,在左侧创建一个后退按钮,但我知道无法让它工作可以在左侧有一个汉堡包菜单,右侧有一个按钮的地方完成。我拍了一张我想要它的样子的照片。后退按钮是在绘画中添加的,而不是通过代码添加的。
Picture of app example
下面是我用来获取右侧菜单的代码。
public class MainForm {
public static Form mainForm;
Command cmd_back, cmd_AboutTheApp;
private enum SideMenuMode {
SIDE, RIGHT_SIDE {
public String getCommandHint() {
return SideMenuBar.COMMAND_PLACEMENT_VALUE_RIGHT;
}
};
public String getCommandHint() {
return null;
}
public void updateCommand(Command c) {
String h = getCommandHint();
if(h == null) {
return;
}
c.putClientProperty(SideMenuBar.COMMAND_PLACEMENT_KEY, h);
}
};
SideMenuMode mode = SideMenuMode.RIGHT_SIDE;
public void init(Object context) {
theme = UIManager.initFirstTheme("/theme");
UIManager.getInstance().setThemeProps(theme.getTheme theme.getThemeResourceNames()[0]));
UIManager.getInstance().getLookAndFeel().setMenuBarClass(SideMenuBar.class);
Display.getInstance().setCommandBehavior(Display.COMMAND_BEHAVIOR_SIDE_NAVIGATION);
}
public void start() {
if(mainForm != null){
mainForm.show();
return;
}
mainForm = new Form();
mainForm.setTitleComponent(title);
mainForm.setLayout(new BorderLayout());
addCommands(mainForm);
}
private void addCommands(Form f){
cmd_Back = new Command("Back");
final Button btn_Back = new Button("Back");
cmd_Back.putClientProperty("TitleCommand", btn_Back);
btn_BackButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
//do some thing
}
});
cmd_AboutTheApp = new Command("About the app");
final Button btn_AboutTheApp = new Button("About the app");
cmd_AboutTheApp.putClientProperty("SideComponent", btn_AboutTheApp);
btn_AboutTheApp.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
//do some thing
}
});
mode.updateCommand(cmd_Back);
f.addCommand(cmd_Back);
mode.updateCommand(cmd_AboutTheApp);
f.addCommand(cmd_AboutTheApp);
}
}
如果我移动后退按钮以便将其添加到 AboutTheApp 按钮之后,则后退按钮将显示在屏幕的右侧,同时也会显示在菜单的右侧,菜单也位于右侧。我尝试了很多不同的方法,但 none 似乎有效
我们在 SideMenuBar
中支持右侧菜单栏,但在 Toolbar
API 中不支持。我们支持将 components/commands 放置在 Toolbar
API 标题区域的 left/right 侧,但不支持 SideMenuBar
.
我想解决方案是在 Toolbar
API 中添加对右侧菜单栏的支持,但我不确定这种更改的复杂性。
我建议在问题跟踪器中提交 RFE 要求这样做,但它可能不会很快,因为我们现在正在关闭 3.3 的功能。
我有一个可以执行此操作的应用程序。在 Google Play(或 App Store)中搜索 "Torquepower Diesel Cummins Engine" 个应用程序。
在主题常量中我设置了自己的rightSideMenuImage和rightSideMenuPressImage,但默认的汉堡包菜单可能适合你。
在每个表单的 beforeXXXX 上,我做这样的事情:
super.beforePartNumberForm(f);
Toolbar tb = createToolbar(f);
createBackCommand(f, tb);
addHelpX(tb);
addViewCartX(tb);
addCallTorquepowerX(tb);
addReverseSwipe(f);
创建工具栏
Toolbar createToolbar(Form f) {
Toolbar tb = new Toolbar();
f.setToolBar(tb);
Label l = new Label();
l.setIcon(res.getImage("tpd_logoZZ.png"));
tb.setTitleComponent(l);
return tb;
}
创建后退按钮
void createBackCommand(Form f, Toolbar tb) {
Command c = new Command("") {
@Override
public void actionPerformed(ActionEvent evt) {
back();
}
};
c.setIcon(res.getImage("black_left_arrow-512.png"));
c.setPressedIcon(res.getImage("grey_left_arrow-512.png"));
// MUST set this before adding to toolbar, else get null pointer
f.setBackCommand(c);
tb.addCommandToLeftBar(c);
}
将需要的任何命令添加到侧边菜单
void addHelpX(Toolbar tb) {
Command c = new Command("Help") {
@Override
public void actionPerformed(ActionEvent evt) {
showForm("HelpForm", null);
}
};
c.putClientProperty(SideMenuBar.COMMAND_PLACEMENT_KEY, SideMenuBar.COMMAND_PLACEMENT_VALUE_RIGHT);
c.putClientProperty("SideComponent", new SideMenuItem(fetchResourceFile(), c.toString(), "very_basic_about.png"));
c.putClientProperty("Actionable", Boolean.TRUE);
tb.addCommandToSideMenu(c);
}
我使用自己的 SideMenuItem,它是:
public class SideMenuItem extends Button {
SideMenuItem() {
this("");
}
SideMenuItem(String s) {
super(s);
setUIID("SideMenuItem");
int h = Display.getInstance().convertToPixels(8, false);
setPreferredH(h);
}
SideMenuItem(Resources res, String s, String icon) {
super();
setIcon(res.getImage(icon));
setText(s);
setUIID("SideMenuItem");
int h = Display.getInstance().convertToPixels(8, false);
setPreferredH(h);
}
}
我正在尝试在代号 one 中制作一个应用程序,我想在屏幕顶部的右侧创建一个手汉堡菜单,在左侧创建一个后退按钮,但我知道无法让它工作可以在左侧有一个汉堡包菜单,右侧有一个按钮的地方完成。我拍了一张我想要它的样子的照片。后退按钮是在绘画中添加的,而不是通过代码添加的。 Picture of app example
下面是我用来获取右侧菜单的代码。
public class MainForm {
public static Form mainForm;
Command cmd_back, cmd_AboutTheApp;
private enum SideMenuMode {
SIDE, RIGHT_SIDE {
public String getCommandHint() {
return SideMenuBar.COMMAND_PLACEMENT_VALUE_RIGHT;
}
};
public String getCommandHint() {
return null;
}
public void updateCommand(Command c) {
String h = getCommandHint();
if(h == null) {
return;
}
c.putClientProperty(SideMenuBar.COMMAND_PLACEMENT_KEY, h);
}
};
SideMenuMode mode = SideMenuMode.RIGHT_SIDE;
public void init(Object context) {
theme = UIManager.initFirstTheme("/theme");
UIManager.getInstance().setThemeProps(theme.getTheme theme.getThemeResourceNames()[0]));
UIManager.getInstance().getLookAndFeel().setMenuBarClass(SideMenuBar.class);
Display.getInstance().setCommandBehavior(Display.COMMAND_BEHAVIOR_SIDE_NAVIGATION);
}
public void start() {
if(mainForm != null){
mainForm.show();
return;
}
mainForm = new Form();
mainForm.setTitleComponent(title);
mainForm.setLayout(new BorderLayout());
addCommands(mainForm);
}
private void addCommands(Form f){
cmd_Back = new Command("Back");
final Button btn_Back = new Button("Back");
cmd_Back.putClientProperty("TitleCommand", btn_Back);
btn_BackButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
//do some thing
}
});
cmd_AboutTheApp = new Command("About the app");
final Button btn_AboutTheApp = new Button("About the app");
cmd_AboutTheApp.putClientProperty("SideComponent", btn_AboutTheApp);
btn_AboutTheApp.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
//do some thing
}
});
mode.updateCommand(cmd_Back);
f.addCommand(cmd_Back);
mode.updateCommand(cmd_AboutTheApp);
f.addCommand(cmd_AboutTheApp);
}
}
如果我移动后退按钮以便将其添加到 AboutTheApp 按钮之后,则后退按钮将显示在屏幕的右侧,同时也会显示在菜单的右侧,菜单也位于右侧。我尝试了很多不同的方法,但 none 似乎有效
我们在 SideMenuBar
中支持右侧菜单栏,但在 Toolbar
API 中不支持。我们支持将 components/commands 放置在 Toolbar
API 标题区域的 left/right 侧,但不支持 SideMenuBar
.
我想解决方案是在 Toolbar
API 中添加对右侧菜单栏的支持,但我不确定这种更改的复杂性。
我建议在问题跟踪器中提交 RFE 要求这样做,但它可能不会很快,因为我们现在正在关闭 3.3 的功能。
我有一个可以执行此操作的应用程序。在 Google Play(或 App Store)中搜索 "Torquepower Diesel Cummins Engine" 个应用程序。
在主题常量中我设置了自己的rightSideMenuImage和rightSideMenuPressImage,但默认的汉堡包菜单可能适合你。
在每个表单的 beforeXXXX 上,我做这样的事情:
super.beforePartNumberForm(f); Toolbar tb = createToolbar(f); createBackCommand(f, tb); addHelpX(tb); addViewCartX(tb); addCallTorquepowerX(tb); addReverseSwipe(f);
创建工具栏
Toolbar createToolbar(Form f) { Toolbar tb = new Toolbar(); f.setToolBar(tb); Label l = new Label(); l.setIcon(res.getImage("tpd_logoZZ.png")); tb.setTitleComponent(l); return tb; }
创建后退按钮
void createBackCommand(Form f, Toolbar tb) { Command c = new Command("") { @Override public void actionPerformed(ActionEvent evt) { back(); } }; c.setIcon(res.getImage("black_left_arrow-512.png")); c.setPressedIcon(res.getImage("grey_left_arrow-512.png")); // MUST set this before adding to toolbar, else get null pointer f.setBackCommand(c); tb.addCommandToLeftBar(c); }
将需要的任何命令添加到侧边菜单
void addHelpX(Toolbar tb) { Command c = new Command("Help") { @Override public void actionPerformed(ActionEvent evt) { showForm("HelpForm", null); } }; c.putClientProperty(SideMenuBar.COMMAND_PLACEMENT_KEY, SideMenuBar.COMMAND_PLACEMENT_VALUE_RIGHT); c.putClientProperty("SideComponent", new SideMenuItem(fetchResourceFile(), c.toString(), "very_basic_about.png")); c.putClientProperty("Actionable", Boolean.TRUE); tb.addCommandToSideMenu(c); }
我使用自己的 SideMenuItem,它是:
public class SideMenuItem extends Button {
SideMenuItem() {
this("");
}
SideMenuItem(String s) {
super(s);
setUIID("SideMenuItem");
int h = Display.getInstance().convertToPixels(8, false);
setPreferredH(h);
}
SideMenuItem(Resources res, String s, String icon) {
super();
setIcon(res.getImage(icon));
setText(s);
setUIID("SideMenuItem");
int h = Display.getInstance().convertToPixels(8, false);
setPreferredH(h);
}
}