gpt4 book ai didi

java - 当 JComboBox 用作表编辑器时动态填充 JComboBox

转载 作者:行者123 更新时间:2023-12-01 22:36:45 26 4
gpt4 key购买 nike

我有一个用例(在 Java Swing 中),其中某个 JTable 列必须可以通过 JComboBox 编辑器进行编辑,但可选择的值列表取决于该行的域对象(我使用自定义 TableModel)。

CellEditor 界面具有在编辑停止或取消时要调用的事件,但没有开始编辑的事件(我希望这是填充我的选择值列表的好地方) .

开始编辑单元格时如何填充组合框?

最佳答案

这是一个问题,我必须在今年早些时候解决(下面的代码来自该项目)。解决方案是为组合框创建专用模型:

mEntityListModel = getMyEntityModel();

T[] items = (T[]) Array.newInstance(type, mEntityListModel.getSize());

for (int i = 0; i < items.length; i++) {
items[i] = mEntityListModel.getElementAt(i);
}
mComboBoxModel = new DefaultComboBoxModel<T>(items);

并用组合框模型均衡实体列表中的每个更改:

mEntityListModel.addListDataListener(new DataListener());// make a better MVC solution if you like

private class DataListener implements ListDataListener {

@Override
public void intervalAdded(ListDataEvent e) {
mComboBoxModel.insertElementAt(mEntityListModel.getElementAt(e.getIndex0()), e.getIndex0());
}

@Override
public void intervalRemoved(ListDataEvent e) {
Object deletedElement = mComboBoxModel.getElementAt(e.getIndex0());

// Clear the combobox selection, if the item is deleted!
if (mSelectionManager.isSelected(deletedElement)) {
mSelectionManager.setSelectedItem(null);
}
mComboBoxModel.removeElementAt(e.getIndex0());
}

@Override
public void contentsChanged(ListDataEvent e) {
intervalRemoved(e);
intervalAdded(e);
}

}

旁注:这是表组合框中的更改的注册方式:

tablecolumn.getCellEditor()
.addCellEditorListener(new CellChangeListener());


private class CellChangeListener implements CellEditorListener {

@Override
public void editingStopped(ChangeEvent e) {
DefaultCellEditor editor;
Object newValue;
if (e.getSource() instanceof DefaultCellEditor) {
editor = (DefaultCellEditor) e.getSource();

newValue = editor.getCellEditorValue();

if (newValue != null) {
//set the newValue for the combobox selection manager
}
}
}

@Override
public void editingCanceled(ChangeEvent e) {
}
}

如您所见,组合框项目列表在编辑器开始工作之前已更新。编辑不负责这项工作。

关于java - 当 JComboBox 用作表编辑器时动态填充 JComboBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26761765/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com