【发布时间】:2012-02-24 19:09:07
【问题描述】:
我有一个 JTable,并且在这些列中我有一个 JComboBox。
My Table 有自己的模型:见下文
package View;
public class CustomTableModel extends AbstractTableModel {
ArrayList<Item> data;
public String[] columnNames = {"ID", "Amount", "value", "bought", "quantity"};
public CustomTableModel(ArrayList<Item> data){
this.data = data
}
public int getColumnCount() {
return columnNames.length;
}
public int getRowCount() {
return data.size();
}
@Override
public Object getValueAt(int arg0, int arg1) {
if(arg1 == 0){
return data.get(arg0).getID();
}
if(arg1 == 1){
return data.get(arg0).getAmount();
}
if(arg1 == 2){
return data.get(arg0).getValue();
}
if(arg1 == 3){
return data.get(arg0).isBought();
}
else {
return data.get(arg0).getQuantity();
}
}
public String getColumnName(int index) {
return columnNames[index];
}
@Override
public void setValueAt(Object aValue, int row, int col) {
if (col == 3) {
data.get(row).setBought((Boolean) aValue);
this.fireTableCellUpdated(row, col);
}
}
public boolean isCellEditable(int row, int col){
return true;
}
public Class<?> getColumnClass(int columnIndex)
{
if (columnIndex == 3 )
{
return Boolean.class;
}
else
return super.getColumnClass(4);
}
这个Renderer和Editor被应用到JComboBox所在的列上;
public class ComboBoxRenderer extends JComboBox implements TableCellRenderer {
public ComboBoxRenderer(String[] items) {
super(items);
}
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
if (isSelected) {
setForeground(table.getSelectionForeground());
super.setBackground(table.getSelectionBackground());
} else {
setForeground(table.getForeground());
setBackground(table.getBackground());
}
setSelectedIndex(0);
return this;
}
public class ComboBoxEditor extends DefaultCellEditor {
public ComboBoxEditor(String[] items) {
super(new JComboBox(items));
}
public Object getCellEditorValue() {
return j.getEditor().getItem();
}
该框显示它应有的所有值,但是当我单击该框并选择另一个值时,只要我在页面上的其他位置导航,它就会恢复为原始值。然而有趣的是,如果我单击列中的任何 JCombobox,它将突出显示我选择的新值!但它只会显示原始的。
【问题讨论】:
-
如需尽快获得更好的帮助,请发帖SSCCE。