Я хотел бы создать свой собственный метод, который будет работать, когда компонент «isSelected».Метод переопределения, который переключает «isSelected» в getListCellRendererComponent
У меня есть JList
, содержащий несколько JPanel
. Класс построения JPanel extends ListCellRenderer<>
.
Чтобы показать, что выбран один из JList-компонентов (JPanels), я использую;
@Override
public Component getListCellRendererComponent(..., boolean isSelected, ...) {
if(isSelected){
setBackground(list.getSelectionBackground());
setForeground(list.getSelectionForeground());
} else {
setBackground(list.getBackground());
setForeground(list.getForeground());
}
return this;
}
Мне нужен метод, который сохраняет выбранный элемент «выбрано», хотя я выбираю другой. Я понимаю, что это можно сделать, удерживая CTRL, но .setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
не совсем делает трюк. Я бы предпочел выбрать несколько, щелкнув по ним, и отмените выбор, щелкнув по ним.
Для этого я работал с ListSelectionMode, но я не могу найти способ.
После выполнения вышеизложенного я хотел бы реализовать метод, который выбирает только компонент в списке при нажатии в определенной области (вместо всего заданного компонента). Я сделал этот метод, который возвращает true, если нажимается правильная область, иначе false. Но поскольку я не могу понять, как переопределить мышь, что делает компоненты «isSelected», это было сложно.
Вот код для метода, который я хотел бы переопределить методом 'isSelected';
this.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent evt) {
if(ActionHandler.mouseClickedPrebuild(evt.getPoint())){
//This code runs if that special place is clicked!
//So now the component should be 'isSelected' or
//deselected if it already was 'isSelected'.
}
}
});
Этот код находится в конструкторе моего JList
и метод mouseClickedPrebuild
;
public static boolean mouseClickedPrebuild(Point point) {
int index = theJList.locationToIndex(point);
Rectangle bounds = theJList.getCellBounds(index,index);
Point p = bounds.getLocation();
return (... long list of greater than & less than ...);
//This gives the certain area which is accepted to return true
1. У меня есть JList, содержащий несколько JPanel. == JList (его XxxListModel) не предназначен для хранения JComponent, не помещайте JComponent в JList (его XxxListModel), 2. внутри ListSelectionModel вы можете переключаться или переопределяться программно, 3. для причины, по которой есть MouseListener, использовать ListSelectionListener, прочитать учебник Oracle для примера рабочего кода – mKorbel
для лучшей помощи, прежде чем опубликовать SSCCE/MCVE, короткий, выполнимый, компилируемый – mKorbel
@mKorbel - I использовал JComponets для рендеринга элементов в моем списке. Я предполагал, что должен быть какой-то способ переопределить код, который выполняется, когда я нажимаю элемент в списке. –