我想制作自己的方法来控制组件何时为“isSelected”。
我有一个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”的mouseevent,所以这很棘手。
这是我想覆盖“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