All Classes Namespaces Files Functions Variables
AutolaskuriController.java
Go to the documentation of this file.
1 package autolaskuri.event;
2 
3 import static fi.jyu.mit.fxgui.Functions.getNode;
4 import static fi.jyu.mit.fxgui.Functions.getNodes;
5 
6 import java.net.URL;
7 import java.util.ArrayList;
8 import java.util.List;
9 import java.util.ResourceBundle;
10 
11 import javafx.beans.property.SimpleIntegerProperty;
12 import javafx.fxml.FXML;
13 import javafx.fxml.Initializable;
14 import javafx.scene.Node;
15 import javafx.scene.control.Button;
16 import javafx.scene.control.Label;
17 import javafx.scene.control.ProgressBar;
18 
19 /**
20  * Yksinkertainen autolaskuri, jossa painkikkeita painamalla
21  * voidaan kasvattaa laskureiden arvoja.
22  * Laskurit ja painikkeet tunnistetaan sillä, että niillä on sama id.
23  * Laskurit tunnistetaan sillä että niissä on luokka "laskuri".
24  * Laskureita etsitään samasta alueesta kuin buttonNollaa on.
25  * @author vesal
26  * @version 6.3.2016
27  */
28 public class AutolaskuriController implements Initializable {
29  @SuppressWarnings("javadoc")
30  public static class Laskettava extends SimpleIntegerProperty {
31  public Laskettava(int value) { super(value); }
32  public int inc() { set(get()+1); return get(); }
33  public int reset() { set(0); return get(); }
34  }
35 
36  @SuppressWarnings("javadoc")
37  public static class Laskettavat {
38  private List<Laskettava> alkiot = new ArrayList<>();
39  public void add(Laskettava alkio) { alkiot.add(alkio); }
40  public void reset() { alkiot.forEach(l -> l.reset()); }
41  }
42 
43 
44  @FXML private Button buttonNollaa;
46 
47  @Override
48  public void initialize(URL location, ResourceBundle resources) {
49  Node parent = buttonNollaa.getParent();
50  List<Label> laskurit = getNodes(parent, Label.class,
51  n -> n.getStyleClass().contains("laskuri"), true);
52 
53  for (Label laskuri: laskurit) {
54  String id = laskuri.getId();
55  if ( id == null || id.length() < 1 ) continue;
56  Laskettava laskettava = new Laskettava(0);
57  laskuri.textProperty().bind(laskettava.asString());
58  laskettavat.add(laskettava);
59  laskuri.setOnMouseClicked(e -> laskettava.inc());
60  laskuri.setOnTouchPressed(e -> laskettava.inc());
61  Button button = getNode(parent, Button.class, n -> id.equals(n.getId()), true);
62  if ( button != null ) button.setOnAction(e -> laskettava.inc());
63  ProgressBar bar = getNode(parent, ProgressBar.class, n -> id.equals(n.getId()), true);
64  if ( bar != null ) bar.progressProperty().bind(laskettava.divide(20.0));
65  }
66  }
67 
68 
69  @FXML void handleNollaa() { laskettavat.reset(); }
70 }