JCombobox,编辑和Renderer相关
作为一个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
提供了一个内部有ZGrid
的JPanel。 问题是,在它的列表中,这个ZGrid正在绘画。 但它也在JCombobox的编辑内部绘制。 我上传了一张图片来更好地展示这一点。
有没有办法将编辑器与列表分开?
alt text http://img444.imageshack.us/img444/564/soex.jpg
根据我的理解,您正在为JComboBox
实现自定义渲染器,虽然它正确呈现了下拉列表的内容,但它完全混淆了combobox的当前值。
我认为有两种选择:
-
您可以扩展
JComboBox
的UI组件并覆盖paint
方法,以便为当前值视图获取网格的自定义表示。 这将是一个非常快速的概念certificate,但它会带来问题,因为您需要扩展您希望应用程序运行的每个UI(金属,窗口,Mac等)。 -
你可以滚动你自己的下拉列表,让它看起来像一个
JComboBox
。 这也不像POC那样难以做到,但这里的复杂性是处理影响combobox周围选择和导航的不同键盘输入。