ListCellRenderer中使用的组件上的MouseListener

时间:2017-09-06 13:33:53

标签: java swing combobox mouseevent renderer

我一直在努力为ComboBox创建自定义渲染器,这样我就可以在每个单元格中都有一个包含JLabel的可点击Icon

我遇到的问题是,MouseEvent似乎无法到达JListBasicComboPopup内部的组件。

这是返回应该呈现的Component的组件:

@Override
  public Component getListCellRendererComponent( final JList<? extends E> list, final @Nullable E value, final int index,
                                                 final boolean isSelected, final boolean cellHasFocus )
  {
    final Component plafComponent = plafRenderer.getListCellRendererComponent( list, value, index, isSelected, cellHasFocus );

    if ( value instanceof String && value.equals( BasicComboBox.SEPARATOR ) )
    {
      return new JSeparator( SwingConstants.HORIZONTAL );
    }

    final JPanel panel = new JPanel( new MigLayout( new LC().fill().flowX().insetsAll( "0" ) ) );

    final Optional<JLabel> cast = Optionals.cast( plafComponent, JLabel.class );
    cast.ifPresent( label ->
    {
      label.setText( converter.apply( value ) );
      panel.add( label, new CC().growX().pushX() );
      panel.setBackground( label.getBackground() );
    } );

    if ( decideIfShowIcon.apply( value ) )
    {
      final IconLabelWithAction<E> iconLabel = new IconLabelWithAction<>( icon, onClickIconConsumer, value );
      panel.add( iconLabel, new CC().alignX( "center" ).gapRight( "5" ) );

      iconLabel.addMouseListener( new MouseAdapter()
      {
        @Override
        public void mouseReleased( final MouseEvent e )
        {
          System.out.println( "Never happens" );
        }
      } );
    }

    return panel;
  }

绘制图标工作正常,它们只是不可点击,我不确定为什么。

我也尝试在JList上捕捉事件,甚至没有效果。

0 个答案:

没有答案