gpt4 book ai didi

java - JXTable 中的 JComboBox 问题

转载 作者:搜寻专家 更新时间:2023-11-01 00:52:19 27 4
gpt4 key购买 nike

我正在尝试将 JXTable 中的列设为组合框。很难解释我面临的问题。当您单击下拉菜单时,有时下拉菜单不会保持足够长的时间供您选择值。它只是关闭并选择了一些值。有时它会保持开放状态供您选择一个值。这是 SSCCE:

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());
}
}

最佳答案

要解决此问题,请确保您不为编辑器和渲染器共享相同的 DefaultComboxBoxModel 实例。所以不要这样:

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.getColumnExt(1).setCellRenderer(new DefaultTableRenderer(new ComboBoxProvider(
new DefaultComboBoxModel(new String[] {"Yes","No","Maybe"}))));
table.getColumnExt(1).setCellEditor(new ComboBoxEditor(
new DefaultComboBoxModel(new String[] {"Yes","No","Maybe"})));

关于java - JXTable 中的 JComboBox 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9124506/

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