Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JCombobox、编辑器和渲染器相关_Java_Rendering_Jcombobox - Fatal编程技术网

Java JCombobox、编辑器和渲染器相关

Java JCombobox、编辑器和渲染器相关,java,rendering,jcombobox,Java,Rendering,Jcombobox,作为JCombobox ListCellRenderer,我有一个类似这样的类: class ZComboBoxRenderer extends JPanel implements ListCellRenderer{ private ZGrid grid; public ZComboBoxRenderer(ZGrid grid) { setLayout(new BorderLayout()); this.grid = grid; add(new JScrollPane(g

作为JCombobox ListCellRenderer,我有一个类似这样的类:

class ZComboBoxRenderer extends JPanel implements ListCellRenderer{
private ZGrid grid;
public ZComboBoxRenderer(ZGrid grid) {
    setLayout(new BorderLayout());
    this.grid = grid;
    add(new JScrollPane(grid), BorderLayout.CENTER);
}
public ZGrid getGrid(){
    return grid;
}
@Override
public Component getListCellRendererComponent(JList list, Object value,
        int index, boolean isSelected, boolean cellHasFocus) {
    grid.fetchSQL();
    return this;
}
}
ZGrid
这里扩展了
JTable

作为一个
ListCellRenderComponent
,我向
JCombobox
提供了一个内部带有
ZGrid
的JPanel。问题是,在它的列表中,这个ZGrid画得很好。但它也在JCombobox的编辑器中绘制。我上传了一张图片来更好地展示这一点

有没有办法将编辑器和列表分开



据我所知,您正在为
JComboBox
实现一个自定义呈现程序,尽管它正确呈现了下拉列表的内容,但它完全弄乱了组合框的当前值

我认为有两种选择可供您选择:

  • 您可以扩展
    JComboBox
    的UI组件,并覆盖
    paint
    方法,以获取当前值视图的网格自定义表示形式。这将是一个非常快速的概念验证,但它会带来一些问题,因为您需要扩展您希望应用程序运行的每个UI(金属、windows、mac等)

  • 您可以滚动自己的下拉列表,使其看起来像一个
    JComboBox
    。作为POC,这也不难做到,但这里的复杂性在于处理影响组合框选择和导航的不同键盘输入


  • 我问这个问题已经有一段时间了,我已经改变了对这个问题的设计。谢谢你的回答。