Swing/LockToPositionOnScroll のバックアップ(No.3)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/LockToPositionOnScroll へ行く。
- 1 (2020-04-20 (月) 03:08:57)
- 2 (2021-10-21 (木) 19:07:57)
- 3 (2023-06-09 (金) 11:14:55)
- 4 (2024-05-16 (木) 09:49:58)
- category: swing folder: LockToPositionOnScroll title: JListのスクロールをセルユニット単位にするかを変更する tags: [JList, JScrollPane, UIManager, LookAndFeel] author: aterai pubdate: 2020-04-20T03:08:08+09:00 description: JListのスクロールバーをマウスでドラッグした場合、セルの上辺を固定したユニット単位のスクロールかなめらなかにスクロールするかを設定します。 image: https://drive.google.com/uc?id=1KPtadNNLz1TOn7yjo-C8DpG6NuDpw-Od
概要
JList
のスクロールバーをマウスでドラッグした場合、セルの上辺を固定したユニット単位のスクロールかなめらなかにスクロールするかを設定します。
Screenshot
Advertisement
サンプルコード
String key = "List.lockToPositionOnScroll";
// UIManager.put(key, Boolean.FALSE);
DefaultListModel<String> model = new DefaultListModel<>();
IntStream.range(0, 1000).mapToObj(Objects::toString).forEach(model::addElement);
JList<String> list = new JList<String>(model) {
@Override public void updateUI() {
setCellRenderer(null);
super.updateUI();
ListCellRenderer<? super String> renderer = getCellRenderer();
setCellRenderer((list, value, index, isSelected, cellHasFocus) -> {
Component c = renderer.getListCellRendererComponent(
list, value, index, isSelected, cellHasFocus);
if (isSelected) {
c.setForeground(list.getSelectionForeground());
c.setBackground(list.getSelectionBackground());
} else {
c.setForeground(list.getForeground());
c.setBackground(index % 2 == 0 ? EVEN_BACKGROUND : list.getBackground());
}
return c;
});
}
};
list.setFixedCellHeight(64);
JCheckBox check = new JCheckBox(key, UIManager.getBoolean(key));
check.addActionListener(e -> UIManager.put(key, ((JCheckBox) e.getSource()).isSelected()));
View in GitHub: Java, Kotlin解説
WindowsLookAndFeel
- デフォルトは
UIManager.getBoolean("List.lockToPositionOnScroll") == Boolean.TRUE
でセルの上辺を固定したユニット単位のスクロール - ホイールスクロールや矢印ボタンのクリック、カーソルキーなどのスクロールは
List.lockToPositionOnScroll
の設定は影響しない
- デフォルトは
BasicLookAndFeel
- デフォルトは
UIManager.getBoolean("List.lockToPositionOnScroll") == Boolean.FALSE
でなめらかにスクロール MetalLookAndFeel
はUIManager.put("List.lockToPositionOnScroll", Boolean.TRUE)
を設定するとスクロールバーのマウスドラッグでもユニット単位のスクロールが可能
- デフォルトは
NumbusLookAndFeel
List.lockToPositionOnScroll
の設定は影響せず、スクロールバーのマウスドラッグはなめらかでもセルの上辺を固定したユニット単位のスクロールではなく、ホイールスクロールや矢印ボタンのクリックと同じスクロールになる