JListのスクロールをセルユニット単位にするかを変更する
Total: 1412
, Today: 2
, Yesterday: 1
Posted by aterai at
Last-modified:
概要
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, check.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
の設定は影響せず、スクロールバーのマウスドラッグはなめらかでもセルの上辺を固定したユニット単位のスクロールではなく、ホイールスクロールや矢印ボタンのクリックと同じスクロールになる