java jcombobox inside a listCellRenderer



我想创建一个包含数据和jCombobox的项目的列表。我使用这个列表单元格渲染器:

public class DeliveryListCellRenderer extends JPanel implements ListCellRenderer{
     JLabel[] lbl = new JLabel[2];  
     JComboBox combo;
  public DeliveryListCellRenderer()  
  {  
    setLayout(new GridLayout(0,2,15,0));  
    lbl[0] = new JLabel("",JLabel.RIGHT);  
    add(lbl[0]);  
    lbl[1] = new JLabel("",JLabel.LEFT);  
    add(lbl[1]);
    String[] timeZones = {"timeZone 1", "timeZone 2", "timeZone 3", "timeZone 4"};
    combo = new JComboBox(timeZones); 
    combo.setSelectedIndex(1);
    add(combo);
  }  
  public Component getListCellRendererComponent(JList list,Object value,  
                      int index,boolean isSelected,boolean cellHasFocus)  
  {  
    Delivery delivery = (Delivery)value;  
    lbl[0].setText("X : "+delivery.getNode().getX());  
    lbl[1].setText("Y : "+delivery.getNode().getY());
    if(isSelected) setBackground(Color.CYAN);  
    else setBackground(Color.WHITE);  
    return this;  
  }  
}
当我

运行应用程序时,一切看起来都正常,但是当我单击组合框时没有任何反应。

有人有想法吗?提前谢谢。

当我运行应用程序时,一切似乎都正常,但没有任何反应 当我单击组合框时。

  • 这不是RendererWhen I run the application, everything appears ok)的工作,必须使用XxxEditor

  • 基本上这是不可能的JList,看看JTable

  • JTable 带有一列和/或不带 JTableHeader

您需要将要在组合框中显示的内容与对象一起映射。

我会建议如下:(T 是对象的类型)。

    public class CustomComboBoxRenderer extends JLabel implements ListCellRenderer<T> {
    @Override
    public Component getListCellRendererComponent(JList<? extends T> list, T value, int index, boolean isSelected, boolean cellHasFocus) {
    if (isSelected) {
        setBackground(list.getSelectionBackground());
        setForeground(list.getSelectionForeground());
    }
    else {
        setBackground(list.getBackground());
        setForeground(list.getForeground());
    }
    if (index == -1) {
        setOpaque(false);
        setForeground(list.getForeground());
    }
    else {
        setOpaque(true);
    }
    setFont(list.getFont());
    if (value != null) {
        setText(value.getName());
    }
    return this;
    }
}

组合框创建:

    JComboBox<T> comboBox = new JComboBox<T>();
    comboBox.setRenderer(new CustomComboBoxRenderer ());
    add(comboBox);

希望这有帮助。

相关内容

  • 没有找到相关文章

最新更新