Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Codenameone 如何选择并高亮显示代号为One的表中的行_Codenameone - Fatal编程技术网

Codenameone 如何选择并高亮显示代号为One的表中的行

Codenameone 如何选择并高亮显示代号为One的表中的行,codenameone,Codenameone,我不熟悉代号1,也不熟悉询问有关堆栈溢出的问题。我觉得两者都很棒 我有一个关于Codename One中的Table类的问题。我搜索了网页,堆栈溢出,API,所有的东西,都找不到一个好的答案 我希望能够选择一行并突出显示它,以便随后可以对其中的数据执行操作。我通过重写createCell方法并创建所有单元格按钮使其工作,但这不是一种可接受的方法。问题在于每次用户“单击”单元格时都必须重新生成表 当表格包含的行数超过了可以显示的行数,并且重新生成表格时,表格将跳回表格的开头。然后,如果用户想查看所

我不熟悉代号1,也不熟悉询问有关堆栈溢出的问题。我觉得两者都很棒

我有一个关于Codename One中的Table类的问题。我搜索了网页,堆栈溢出,API,所有的东西,都找不到一个好的答案

我希望能够选择一行并突出显示它,以便随后可以对其中的数据执行操作。我通过重写
createCell
方法并创建所有单元格按钮使其工作,但这不是一种可接受的方法。问题在于每次用户“单击”单元格时都必须重新生成表

当表格包含的行数超过了可以显示的行数,并且重新生成表格时,表格将跳回表格的开头。然后,如果用户想查看所选行,则必须向下滚动至所选行。让桌子像那样跳来跳去是不可接受的

此外,我可能希望使用表中的其他控件。我知道有一个
表。getSelectedRow()
,所以我可能遗漏了什么。另外,我想知道如何以编程方式选择一行


非常感谢您的帮助

这是基于javadocs for
中的示例。我做的一个小技巧是
setModel(getModel())
手动触发表刷新:

Form hi = new Form("Table", new BorderLayout());
TableModel model = new DefaultTableModel(new String[] {"Col 1", "Col 2", "Col 3"}, new Object[][] {
    {"Row 1", "Row A", "Row X"},
    {"Row 2", "Row B can now stretch", null},
    {"Row 3", "Row C", "Row Z"},
    {"Row 4", "Row D", "Row K"},
    }) {
        public boolean isCellEditable(int row, int col) {
            return col != 0;
        }
    };
Table table = new Table(model) {
    private int selectedRow = -1;
    @Override
    protected Component createCell(Object value, int row, int column, boolean editable) { 
        Component cell;
        if(row < 0) {
            cell = super.createCell(value, row, column, editable);
        } else {
            cell = new Button(value.toString());
            cell.setUIID("TableCell");
            ((Button)cell).addActionListener(e -> {
                selectedRow = row;
                setModel(getModel());
            });
        }
        if(selectedRow > -1 && selectedRow == row) { 
            cell.getAllStyles().setBgColor(0xff0000);
            cell.getAllStyles().setBgTransparency(100);
        } 
        return cell;
    }

    @Override
    protected TableLayout.Constraint createCellConstraint(Object value, int row, int column) {
        TableLayout.Constraint con =  super.createCellConstraint(value, row, column);
        if(row == 1 && column == 1) {
            con.setHorizontalSpan(2);
        }
        con.setWidthPercentage(33);
        return con;
    }
};
hi.add(BorderLayout.CENTER, table);
hi.show();
Form hi=new Form(“表格”,new BorderLayout());
TableModel model=new DefaultTableModel(新字符串[]{“列1”、“列2”、“列3”},新对象[][]{
{“第1行”、“第A行”、“第X行”},
{“第2行”,“B行现在可以拉伸”,null},
{“第3行”、“第C行”、“第Z行”},
{“第4行”、“第D行”、“第K行”},
}) {
公共布尔值可编辑(int行,int列){
返回列!=0;
}
};
表格=新表格(型号){
private int selectedRow=-1;
@凌驾
受保护的组件createCell(对象值,int行,int列,布尔可编辑){
成分细胞;
如果(行<0){
cell=super.createCell(值、行、列、可编辑);
}否则{
单元格=新按钮(value.toString());
cell.setUIID(“TableCell”);
((按钮)单元格)。addActionListener(e->{
selectedRow=行;
setModel(getModel());
});
}
如果(selectedRow>-1&&selectedRow==行){
cell.getAllStyles().setBgColor(0xff0000);
cell.getAllStyles().setBgTransparency(100);
} 
返回单元;
}
@凌驾
受保护的TableLayout.Constraint createCellConstraint(对象值、int行、int列){
TableLayout.Constraint con=super.createCellConstraint(值、行、列);
if(行==1和列==1){
con.设置水平跨度(2);
}
con.设置宽度百分比(33);
返回con;
}
};
hi.add(BorderLayout.CENTER,table);
嗨,show();

我将使用的解决方案如下:

  • 对于单个选择,请在第一列中选择一个单选按钮
  • 对于多重选择,请在第一列中选中复选框
  • 我仍然很好奇com.codename1.ui.table.table类中的getSelectedRow()用于什么


    我希望这对其他人的GUI设计有所帮助。

    谢谢您的回答。我在研究了这个问题之后,在提出这个问题之前,也提出了同样的解决方案。但是,它并不能满足我的所有要求。我确实想出了一个替代方案,我将把它作为一个答案发布。再次感谢你的帮助。