Java 代码名一-为什么从另一个表单返回时会修改我的表格布局?
我的问题是:我有一个表单,它包含几个选项卡。在第一个表中,我有一个包含信息的表。我的问题是,当我打开一个新表单(比如,一个对话框)然后关闭它时,我的表布局会意外地被修改。如果我打开一个新表单,然后使用“后退”按钮,就会观察到相同的行为 我在下面设置了一个最小的示例,只有一个选项卡,说明了问题:Java 代码名一-为什么从另一个表单返回时会修改我的表格布局?,java,codenameone,Java,Codenameone,我的问题是:我有一个表单,它包含几个选项卡。在第一个表中,我有一个包含信息的表。我的问题是,当我打开一个新表单(比如,一个对话框)然后关闭它时,我的表布局会意外地被修改。如果我打开一个新表单,然后使用“后退”按钮,就会观察到相同的行为 我在下面设置了一个最小的示例,只有一个选项卡,说明了问题: public class spmonMobileApp { private Form current; private Resources theme; private Ta
public class spmonMobileApp {
private Form current;
private Resources theme;
private Table table;
public void init(Object context) {
theme = UIManager.initFirstTheme("/theme");
// Enable Toolbar on all Forms by default
Toolbar.setGlobalToolbar(true);
}
public void start() {
Form tabsForm = new Form("", new LayeredLayout());
Tabs tabs = new Tabs(Component.BOTTOM);
Container mainContainer = new Container(new BoxLayout(BoxLayout.Y_AXIS));
TableModel tableModel = new DefaultTableModel(new String[] {""}, new Object[][] {{"MCR"}, {"SSR"}, {"HQ"}}, false);
table = new Table(tableModel) {
@Override
protected Component createCell(Object value, int row, int column, boolean editable) { // (1)
Component p = new Label((String)value);
p.getAllStyles().setBgColor(0xFFFF00);
p.getAllStyles().setBgTransparency(255);
p.getAllStyles().setAlignment(CENTER);
p.addPointerPressedListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent evt) {
//createDataForm((String)value).show();
System.out.println(((TableLayout)table.getLayout()).isGrowHorizontally());
Dialog.show("Example", "Just a test", "OK", "Cancel");
System.out.println(((TableLayout)table.getLayout()).isGrowHorizontally());
}
});
return p;
}
};
((TableLayout)table.getLayout()).setGrowHorizontally(true);
mainContainer.add(table);
tabs.addTab("Welcome", mainContainer);
tabsForm.add(tabs);
tabsForm.show();
}
public void stop() {
current = Display.getInstance().getCurrent();
if(current instanceof Dialog) {
((Dialog)current).dispose();
current = Display.getInstance().getCurrent();
}
}
public void destroy() {
}
}
特别是,可以看到isgrowshorizontal()在打开对话框之前为true,之后为false(因此标签会收缩)
在下图中可以看到视觉效果(左侧是在打开对话框之前(所需行为),右侧是在关闭对话框之后):
那么,有人知道为什么会这样吗?如果是这样,有人知道如何解决这个问题吗(或者我做错了什么:-)
如果没有,是否有人知道如何使单元格跨越屏幕的整个宽度,并在对话框关闭后保持这种状态
提前谢谢
Deneb问题在于您依赖于
表
保持相同的布局实例,但事实并非如此。每当刷新表时,都会替换布局实例
“正确”的方法是为表格单元格定义一个约束,例如:
table = new Table(tableModel) {
protected TableLayout.Constraint createCellConstraint(Object value, int row, int column) {
TableLayout.Constraint c = super.createCellConstraint(value, row, column);
c.setWidthPercentage(-2);
return c;
}
... rest of your code
};
-2是一种特殊情况,使列具有全宽。在本例中,我将其应用于所有单元格,但您可能应该只将其应用于一列,因此您应该调整该语句。第一个问题写得非常好。欢迎来到SO!谢谢我只是希望有人能找到解决办法,因为我个人的想法已经没有了:-/