问题
I want to add a combo Box in table cell to provide drag n drop option LWUIT.
I have used this option for it ..
private String strCmbBox[] = { "1", "2", "3", "4" };
ComboBox comboRdoBox = new ComboBox(strCmbBox);
comboRdoBox.setListCellRenderer(new comboBoxRenderer());
TableModel model = new DefaultTableModel(new String[] { "Col 1",
"Col 2", "Col 3" }, new Object[][] {
{"Row 1",new DefaultTableModel(new String[] { "1" },
new Object[][] { { comboRdoBox }, { "lbl" } }),
"Row X" }, { "Row 2", "Row B", "Row Y" },
{ "Row 3", "Row C", "Row Z" },
{ "Row 4", "Row D", "Row K" }, });
Table table = new Table(model);
table.initComponent();
f.addComponent(table);
f.show();
but it returns as a address n all attributes value in cell ; rather displaying combo Box in cell...
Ans : com.sun.lwuit.table.DefaultTableModel@f828ed68
Can any one help me to solve this ... ???
回答1:
I got it .. after some googling ... :D
package examples;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
import com.sun.lwuit.ComboBox;
import com.sun.lwuit.Component;
import com.sun.lwuit.Display;
import com.sun.lwuit.Form;
import com.sun.lwuit.List;
import com.sun.lwuit.RadioButton;
import com.sun.lwuit.list.ListCellRenderer;
import com.sun.lwuit.table.DefaultTableModel;
import com.sun.lwuit.table.Table;
import com.sun.lwuit.table.TableModel;
class CustomTable extends Table {
static ComboBox comboRdoBox[];
public CustomTable(TableModel model) {
super(model);
comboRdoBox = new ComboBox[this.getModel().getRowCount()];
}
protected Component createCell(Object value, int row, int column,
boolean editable) {
System.out.print("row : " + row);
System.out.println(" column : " + column);
// if (row == 2) {
switch (column) {
case 1:
if (comboRdoBox[column] == null) {
comboRdoBox[column] = new ComboBox(DemoTable2.strCmbBox);
comboRdoBox[column].setListCellRenderer(new rdioBoxRenderer());
}
return comboRdoBox[column];
}
// }
return super.createCell(value, row, column, editable);
}
}
class rdioBoxRenderer extends RadioButton implements ListCellRenderer {
public rdioBoxRenderer() {
super("In super");
}
public Component getListCellRendererComponent(List arg0, Object value,
int index, boolean isSelected) {
// TODO Auto-generated method stub
setText(" value :" + value + " index: " + (index + 1));
if (isSelected) {
setFocus(true);
setSelected(true);
} else {
setFocus(false);
setSelected(false);
}
return this;
}
public Component getListFocusComponent(List arg0) {
setText("");
setFocus(true);
setSelected(true);
return this;
}
}
public class demoTable extends MIDlet {
public demoTable() {
// TODO Auto-generated constructor stub
}
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
// TODO Auto-generated method stub
}
protected void pauseApp() {
// TODO Auto-generated method stub
}
protected void startApp() throws MIDletStateChangeException {
Display.init(this);
Form form = new Form("Hello Form");
// form.setLayout(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", "Row Y" },
{ "Row 3", "Row C", "Row Z" }, { "Row 4", "Row D", "Row K" }, });
CustomTable customTable = new CustomTable(model);
form.addComponent(customTable);
form.show();
}
}
回答2:
In response to your message to my old question, extend Table like in the example I provide.
Override the createCell method to return the combox for the column containing it.
来源:https://stackoverflow.com/questions/5740411/how-can-i-add-combo-box-in-a-table-cell-using-lwuit-j2me