的建議我有幾個帶有自定義模型的JComboBox。基本上它們用於顯示某些JTable列的值(因此我決定在擴展AbstractTableModel的類 的相應類上實現它們)。關於如何在我的項目中調試ComboBoxModel
public class MyTableModel1 extends AbstractTableModel{
protected class MyTableComboBoxModel1 extends AbstractListModel implements ComboBoxModel{
private Object selected;
@Override
public Object getElementAt(int index) {
return getValueAt(index, 1);
}
@Override
public int getSize() {
return getRowCount();
}
@Override
public Object getSelectedItem() {
return this.selected;
}
@Override
public void setSelectedItem(Object anItem) {
this.selected = anItem;
}
}
}
而我有幾個模型:MyTableModel2與MyTableComboBoxModel2。這些模型都做相同的事情,除了一些額外的操作既不與組合框相關也不與表本身相關。
所有這些東西的目的應該是相應地更新JComboBox的顯示值以發生相對JTable的修改。
對於我已經實現的模型,除了在一種情況下,以及在幾個小時的調試後,我仍然無法解決它,所有的工作都很好。竊聽模型的代碼與其他代碼幾乎相同。也許這是我的代碼中的其他地方的錯誤,但我無法弄清楚在哪裏。
錯誤的情況下,有以下行爲:當我最初創建一個表,一些值,這些都是正確的,即使在JComboBox中顯示,但是當我添加一個新行顯示的值成爲所有空白(顯示空白的大小菜單是正確的)。 我發現:
- jtable的新行被正確添加。
- getElementAt方法在JComboBox上單擊時會被調用幾次,並返回所有可用的值(包括新值)。
- 方法的getSize()當我點擊的JComboBox並返回正確的更新後的值
- 如果JComboBox中具有焦點,我可以使用箭頭鍵選擇可用的項目,所有項目都選擇(甚至增加的)被調用。
- 如果我使用鼠標在顯示的空白菜單上隨意點擊一個點,可以選擇最後一個可用條目。
有沒有人有任何想法?你能建議我在這種情況下如何調試?不幸的是我不能發佈一個SSCCE ..我希望有人能夠幫助反正..
可能在添加項目後調用combo.revalidate()。 – toto2
@toto:我試過但重新驗證沒有解決問題 – Heisenbug
嘗試在不同的平臺上?還是不同的外觀? – toto2