JListでカレンダーを作成しマウスドラッグで日付の範囲を選択する
Total: 1460
, Today: 4
, Yesterday: 2
Posted by aterai at
Last-modified:
概要
JList
で作成したカレンダーでマウスドラッグによる日付の範囲選択を実行します。
Screenshot
Advertisement
サンプルコード
class SingleIntervalMouseSelectionListener extends MouseInputAdapter {
private int start = -1;
@Override public void mousePressed(MouseEvent e) {
JList<?> l = (JList<?>) e.getComponent();
start = l.locationToIndex(e.getPoint());
l.getSelectionModel().addSelectionInterval(start, start);
}
@Override public void mouseDragged(MouseEvent e) {
JList<?> l = (JList<?>) e.getComponent();
int end = l.locationToIndex(e.getPoint());
l.getSelectionModel().addSelectionInterval(start, end);
}
}
View in GitHub: Java, Kotlin解説
上記のサンプルではJListで月のカーソルキー移動や、週を跨いた日付を範囲選択が可能なカレンダーを作成するで作成した「ニュースペーパー・スタイル」レイアウトを適用したJList
カレンダーにMouseListener
、MouseMotionListener
を追加してマウスドラッグによる日付の範囲選択を可能にしています。
- 日付の範囲なので連続範囲はひとつになるよう
ListSelectionModel.SINGLE_INTERVAL_SELECTION
をセレクションモードに設定 - 選択範囲の更新はDefaultListSelectionModel#addSelectionInterval(int, int) (Java Platform SE 8)やDefaultListSelectionModel#setSelectionInterval(int, int) (Java Platform SE 8)などで開始日と終了日を順不同でまとめて設定可能
- JList#setSelectedIndices(int%5B%5D) (Java Platform SE 8)で選択インデックスの配列を作成して範囲選択する方法もある
int min = Math.min(start, end); int max = Math.max(start, end); l.setSelectedIndices(IntStream.rangeClosed(min, max).toArray());
- JListのアイテムを範囲指定で選択