/* * Copyright (C) 2017 たんらる */ package fourthline.mabiicco.ui.editor; import java.awt.BorderLayout; import java.util.function.Consumer; import java.util.function.Supplier; import javax.swing.JButton; import javax.swing.JMenu; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.JSlider; import static fourthline.mabiicco.AppResource.appText; /** * ポップアップメニューで音量を変更する. */ public class VelocityChangeMenu { private final JSlider slider = new JSlider(0, 15, 8); private final JMenu menu = new JMenu(appText("edit.velocity")); private final JButton defaultButton = new JButton(appText("edit.default")); private final JButton applyButton = new JButton(appText("edit.apply")); private final JButton cancelButton = new JButton(appText("edit.cancel")); /** * @param parent メニューを登録する親 * @param getter デフォルト値取得時のgetter * @param setter 値反映時のsetter */ public VelocityChangeMenu(JPopupMenu parent, Supplier<Integer> getter, Consumer<Integer> setter) { slider.setSnapToTicks(true); slider.setPaintTicks(true); slider.setMinorTickSpacing(1); slider.setMajorTickSpacing(3); slider.setPaintLabels(true); defaultButton.addActionListener(t -> { int v = getter.get(); setValue(v); }); applyButton.addActionListener(t -> { setter.accept(slider.getValue()); parent.setVisible(false); }); cancelButton.addActionListener(t -> { parent.setVisible(false); }); JPanel p1 = new JPanel(); p1.add(defaultButton); p1.add(applyButton); p1.add(cancelButton); JPanel p2 = new JPanel(new BorderLayout()); p2.add(slider, BorderLayout.CENTER); JPanel p3 = new JPanel(new BorderLayout()); p3.add(p2, BorderLayout.NORTH); p3.add(p1, BorderLayout.CENTER); menu.add(p3); parent.add(menu); } public void setValue(int v) { slider.setValue(v); } }