コンポーネントがいつ「isSelected」になるかを制御する独自のメソッドを作成したいと思います。
複数をJList
含む がありますJPanel
。の構築クラスJPanel extends ListCellRenderer<>
。
JList コンポーネント (JPanels) の 1 つが選択されていることを示すには、次を使用します。
@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