JCombobox,编辑和Renderer相关

时间:2009-12-27 18:22:36

标签: 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(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

作为ListCellRendererComponent,我在ZGrid内部提供了一个JCombobox的JPanel。问题是,在它的列表中,这个ZGrid正在绘画。但它也在JCombobox的编辑内部绘制。我上传了一张图片以便更好地展示。

有没有办法将Editor与List分开?


alt text http://img444.imageshack.us/img444/564/soex.jpg

1 个答案:

答案 0 :(得分:1)

根据我的理解,您正在为JComboBox实现自定义渲染器,虽然它正确呈现了您的下拉列表的内容,但它完全弄乱了组合框的当前值。

我认为有两种选择:

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

  2. 您可以滚动自己的下拉菜单,并使其看起来像JComboBox。这也不像POC那样难以做到,但这里的复杂性是处理影响组合框周围选择和导航的不同键盘输入。