Question

I have a JPanel which contains two JLists - both can have an item in them selected - as expected.

What I'd love to be able to do is have it so that only one item in either to be selected

Can anyone help me with either

a) "marrying" them so this can be the case

b) giving me some tips for the best practice to write listeners which can preside over them both and unselect all the elements of one when the other is selected - I'd rather avoid this if possible as I can see it getting ugly!!

Thanks :)

Was it helpful?

Solution

I think the best solution, also for the user, is putting a radio button next with a category label to each list, so you clearly disable the other each time you select one.

I can imagine the user clicking values on the first list, then clicking on the next one and seeing all the values he clicked are gone, with logical frustration...

Then when you are taking the values from the form, just take the enabled ones

OTHER TIPS

The listener is not that difficult nor ugly to write. I would

  • make sure the lists only support single selection
  • add the same selection listener to both lists' selection model

This listener can be implemented as

public void valueChanged(ListSelectionEvent e){
  if ( e.isAdjusting()) return;

  ListSelectionModel sourceSelectionModel = (ListSelectionModel) e.getSource();
  if ( !sourceSelectionModel.isSelectionEmpty() ){
    //still need to implement the findOtherSelectionModel method
    ListSelectionModel other = findOtherSelectionModel( sourceSelectionModel );
    other.clearSelection();
  }
}

Note that clearing the selection will trigger the listener again, but due to the isSelectionEmpty check you will not end up with a loop. Another approach would be to disable the listener (e.g. with a boolean flag) right before you call clearSelection on the other list.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top