123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- package holeg.addon.helper;
- import holeg.model.HolonElement.Priority;
- import java.util.Hashtable;
- import java.util.logging.Logger;
- import javax.swing.BorderFactory;
- import javax.swing.BoxLayout;
- import javax.swing.JLabel;
- import javax.swing.JPanel;
- import javax.swing.JSlider;
- public class RandomPriotity extends JPanel {
- private static final Logger log = Logger.getLogger(RandomPriotity.class.getName());
- private final int start = 0, end = 100;
- /**
- * Its like a Gradient the Values are on one Axis from Start to End: |--start--lm--mh--he--end--|
- * lm: lowMedium mh: mediumHigh he: highEssential
- */
- private int lm = 25, mh = 50, he = 75;
- private JSlider lowChanceSlider = new JSlider(JSlider.HORIZONTAL, 0, 100, lm - start);
- private JSlider mediumChanceSlider = new JSlider(JSlider.HORIZONTAL, 0, 100, mh - lm);
- private JSlider highChanceSlider = new JSlider(JSlider.HORIZONTAL, 0, 100, he - mh);
- private JSlider essentialChanceSlider = new JSlider(JSlider.HORIZONTAL, 0, 100, end - he);
- public RandomPriotity() {
- this.setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
- this.add(initVisualizeSlider(this.lowChanceSlider, "Low"));
- this.add(initVisualizeSlider(this.mediumChanceSlider, "Medium"));
- this.add(initVisualizeSlider(this.highChanceSlider, "High"));
- this.add(initVisualizeSlider(this.essentialChanceSlider, "Essential"));
- lowChanceSlider.setToolTipText("" + ((double) lowChanceSlider.getValue() / 100.0));
- mediumChanceSlider.setToolTipText("" + ((double) mediumChanceSlider.getValue() / 100.0));
- highChanceSlider.setToolTipText("" + ((double) highChanceSlider.getValue() / 100.0));
- essentialChanceSlider.setToolTipText("" + ((double) essentialChanceSlider.getValue() / 100.0));
- lowChanceSlider.addChangeListener(actionEvent -> {
- setLM(lowChanceSlider.getValue());
- updateSliders();
- lowChanceSlider.setToolTipText("" + ((double) lowChanceSlider.getValue() / 100.0));
- log.info("lowChance = " + lowChanceSlider.getValue());
- });
- mediumChanceSlider.addChangeListener(actionEvent -> {
- if (lm + mediumChanceSlider.getValue() <= 100) {
- setMH(lm + mediumChanceSlider.getValue());
- } else {
- setLM(end - mediumChanceSlider.getValue());
- }
- updateSliders();
- mediumChanceSlider.setToolTipText("" + ((double) mediumChanceSlider.getValue() / 100.0));
- log.info("mediumChance = " + mediumChanceSlider.getValue());
- });
- highChanceSlider.addChangeListener(actionEvent -> {
- if (mh + highChanceSlider.getValue() <= 100) {
- setHE(mh + highChanceSlider.getValue());
- } else {
- setMH(end - highChanceSlider.getValue());
- }
- updateSliders();
- highChanceSlider.setToolTipText("" + ((double) highChanceSlider.getValue() / 100.0));
- log.info("highChance = " + highChanceSlider.getValue());
- });
- essentialChanceSlider.addChangeListener(actionEvent -> {
- setHE(end - essentialChanceSlider.getValue());
- updateSliders();
- essentialChanceSlider.setToolTipText(
- "" + ((double) essentialChanceSlider.getValue() / 100.0));
- log.info("essentialChance = " + essentialChanceSlider.getValue());
- });
- }
- private void setLM(int value) {
- lm = clamp(value, 0, 100);
- if (lm > mh) {
- mh = lm;
- }
- if (lm > he) {
- he = lm;
- }
- }
- private void setMH(int value) {
- mh = clamp(value, 0, 100);
- if (mh < lm) {
- lm = mh;
- }
- if (mh > he) {
- he = mh;
- }
- }
- private void setHE(int value) {
- he = clamp(value, 0, 100);
- if (he < lm) {
- lm = he;
- }
- if (he < mh) {
- mh = he;
- }
- }
- private int clamp(int input, int min, int max) {
- return Math.max(min, Math.min(max, input));
- }
- private void updateSliders() {
- lowChanceSlider.setValue(lm - start);
- mediumChanceSlider.setValue(mh - lm);
- highChanceSlider.setValue(he - mh);
- essentialChanceSlider.setValue(end - he);
- }
- private JSlider initVisualizeSlider(JSlider jslider, String name) {
- jslider.setBorder(BorderFactory.createTitledBorder(name));
- jslider.setMajorTickSpacing(50);
- jslider.setMinorTickSpacing(5);
- jslider.setPaintTicks(true);
- Hashtable<Integer, JLabel> labelTable = new Hashtable<Integer, JLabel>();
- labelTable.put(Integer.valueOf(0), new JLabel("0.0"));
- labelTable.put(Integer.valueOf(50), new JLabel("0.5"));
- labelTable.put(Integer.valueOf(100), new JLabel("1.0"));
- jslider.setLabelTable(labelTable);
- jslider.setPaintLabels(true);
- return jslider;
- }
- public Priority getPriority() {
- double randomDoubleInRange = Math.random() * 100.0;
- if (randomDoubleInRange <= lm) {
- return Priority.Low;
- } else if (randomDoubleInRange <= mh) {
- return Priority.Medium;
- } else if (randomDoubleInRange <= he) {
- return Priority.High;
- } else {
- return Priority.Essential;
- }
- }
- @Override
- public void setEnabled(boolean value) {
- lowChanceSlider.setEnabled(value);
- mediumChanceSlider.setEnabled(value);
- highChanceSlider.setEnabled(value);
- essentialChanceSlider.setEnabled(value);
- }
- }
|