【问题标题】:java jcombobox inside a listCellRendererlistCellRenderer 内的 java jcombobox
【发布时间】:2012-11-13 08:34:09
【问题描述】:

我想创建一个包含数据项和 jCombobox 的列表。 我使用这个 listCellRenderer :

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

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

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

【问题讨论】:

    标签: java swing jpanel jcombobox listcellrenderer


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      我建议如下: (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;
          }
      }
      

      ComboBox 创建:

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

      希望这会有所帮助。

      【讨论】:

      • 您的问题来自透明度管理这与所述问题有何关系:一切正常,但单击组合框时没有任何反应(或者换句话说:这个答案是错误的)
      • @kleopatra:感谢您的反馈。但是,这对我有用。我同意“问题来自透明度管理”的评论不是有史以来最好的,但是代码的以下部分将要显示在 ComboBox 中的字符串与数据对象映射: if (value != null) { setText(value .getName()); }
      • 请仔细阅读这个问题(承认这个问题并不太清楚,并且 JList 不支持它的要求,因为 renderer 不是容器层次结构的一部分).. . 你的答案完全不相关。
      猜你喜欢
      • 2017-10-05
      • 1970-01-01
      • 2011-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-17
      • 2011-02-19
      • 1970-01-01
      相关资源
      最近更新 更多