5
我正在試圖將JXTable中的列設置爲組合框。它很難解釋我面臨的問題。當你點擊下拉菜單時,下拉菜單不會保持足夠長的時間來選擇該值。它只是關閉,並選擇了一些價值。有時它保持開放供您選擇一個值。 這裏的SSCCE:JXTable中的JComboBox問題
import java.awt.Color;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultCellEditor;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.table.DefaultTableModel;
import org.jdesktop.swingx.JXFrame;
import org.jdesktop.swingx.JXTable;
import org.jdesktop.swingx.renderer.CellContext;
import org.jdesktop.swingx.renderer.ComponentProvider;
import org.jdesktop.swingx.renderer.DefaultTableRenderer;
public class Test {
public static void main(String[] args) {
JXFrame frame=new JXFrame();
Object[][] rows = new Object[10][];
for (int i = 0; i < rows.length; i++) {
rows[i] = new Object[]{
"Test data ","Yes"};
}
DefaultTableModel model = new DefaultTableModel(rows,
new String[]{
"Title 1", "Title 2"
});
final JXTable table = new JXTable(model);
DefaultComboBoxModel cmodel = new DefaultComboBoxModel(new String[] {"Yes","No","Maybe"});
table.getColumnExt(1).setCellRenderer(new DefaultTableRenderer(new ComboBoxProvider(cmodel)));
table.getColumnExt(1).setCellEditor(new ComboBoxEditor(cmodel));
table.setVisibleRowCount(10);
frame.setContentPane(table);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}
class ComboBoxEditor extends DefaultCellEditor {
public ComboBoxEditor(ComboBoxModel model) {
super(new JComboBox(model));
}
}
class ComboBoxProvider extends ComponentProvider<JComboBox> {
private static final long serialVersionUID = 1L;
private JComboBox box;
public ComboBoxProvider(ComboBoxModel model){
box.setModel(model);
}
@Override
protected void configureState(CellContext context) {
box.setForeground(Color.black);
}
@Override
protected JComboBox createRendererComponent() {
box = new JComboBox();
box.setForeground(Color.black);
return box;
}
@Override
protected void format(CellContext context) {
box.setForeground(Color.black);
rendererComponent.setSelectedItem(context.getValue());
}
}
你可以用'JTable'來複制問題嗎? – 2012-02-03 06:35:28
@AndrewThompson是的,同樣的問題。不是一個解決方案,只是一個(不相關的)小心:不要在渲染器和編輯器中使用相同的comboBoxModel實例 - 編輯器會永久地聽到可能導致奇怪效果的模型,甚至可能破壞數據 – kleopatra 2012-02-03 07:10:46
嗯......看起來像是Swing中最老的bug之一(沒有id,懶得在臭名昭着的bug遊行中搜索),我認爲這是被修正的:發生在覈心JTable,核心默認(標籤)渲染器和核心默認組合編輯器 - 首先點擊進入單元格,彈出窗口有時會顯示,有時不顯示(儘管表格總是處於編輯狀態,afaics) – kleopatra 2012-02-03 07:28:07