All Classes Namespaces Files Functions Variables
Dialogs.java
Go to the documentation of this file.
1 package fi.jyu.mit.fxgui;
2 
3 import java.util.Optional;
4 
5 import javafx.scene.control.Alert;
6 import javafx.scene.control.Alert.AlertType;
7 import javafx.scene.control.ButtonBar.ButtonData;
8 import javafx.scene.control.ButtonType;
9 import javafx.scene.control.Control;
10 import javafx.scene.control.TextInputDialog;
11 import javafx.scene.control.Tooltip;
12 
13 /**
14  * @author vesal
15  * @version 31.12.2015
16  * Joukko valmiita dialogeja helpottamaan yksinkertaisia tehtäviä.
17  */
18 public class Dialogs {
19 
20  /**
21  * Rajapinta dialogin asettamisen takaisinkutsulle
22  */
23  public interface AlertSetterInterface {
24  /**
25  * @param alert mille dialogille asetetaan
26  */
27  public void set(Alert alert);
28  }
29 
30 
31  /**
32  * Rajapinta dialogin asettamisen takaisinkutsulle
33  */
34  public interface TextInputDialogSetterInterface {
35  /**
36  * @param dlg mille dialogille asetetaan
37  */
38  public void set(TextInputDialog dlg);
39  }
40 
41 
42  /**
43  * Asetetan tietylle kontrollille Tooltip
44  * @param node mikkle kontrollille asetetaan
45  * @param tip mikä viesti
46  * @return luotu Tooltip tai null jos ei viestiä
47  */
48  public static Tooltip setToolTipText(Control node, String tip) {
49  if ( tip == null || tip.isEmpty() ) {
50  node.setTooltip(null);
51  return null;
52  }
53  Tooltip tooltip = new Tooltip();
54  tooltip.setText(tip);
55  node.setTooltip(tooltip);
56  return tooltip;
57  }
58 
59 
60  /**
61  * Näytetään viesti käyttäjälle ja odotetaan kuittausta
62  * @param message näytettävä viesti
63  * @param alertSetter kutsu, jolla voidaan asettaa arvoja ennen näyttämistä
64  */
65  public static void showMessageDialog(String message, AlertSetterInterface alertSetter) {
66  Alert alert = new Alert(AlertType.INFORMATION);
67  alert.setTitle("Huomautus");
68  alert.setHeaderText(null);
69  alert.setContentText(message);
70  alert.getDialogPane().setPrefSize(200, -1);
71  if ( alertSetter != null ) alertSetter.set(alert);
72  alert.showAndWait();
73  }
74 
75 
76  /**
77  * Näytetään viesti käyttäjälle ja odotetaan kuittausta
78  * @param message näytettävä viesti
79  */
80  public static void showMessageDialog(String message) {
81  showMessageDialog(message, null);
82  }
83 
84 
85  /**
86  * Näytetään dialogi, joka kysyy merkkijonon
87  * @param prompt teksti joka näytetään kysymykseksi
88  * @param def arvo joka on syötön pohjana
89  * @param setter kutsu, jolla voidaan asettaa arvoja ennen näyttämistä
90  * @return null mikäli painetaan Cancel, muuten käyttäjän antama syöte.
91  */
92  public static String showInputDialog(String prompt, String def, TextInputDialogSetterInterface setter) {
93  TextInputDialog dialog = new TextInputDialog(def);
94  dialog.setHeaderText(null);
95  dialog.setTitle("Vastaa");
96  dialog.setContentText(prompt + ":");
97  if ( setter != null ) setter.set(dialog);
98  Optional<String> answer = dialog.showAndWait();
99  return answer.isPresent() ? answer.get() : null;
100  }
101 
102 
103  /**
104  * Näytetään dialogi, joka kysyy merkkijonon
105  * @param prompt teksti joka näytetään kysymykseksi
106  * @param def arvo joka on syötön pohjana
107  * @return null mikäli painetaan Cancel, muuten käyttäjän antama syöte.
108  */
109  public static String showInputDialog(String prompt, String def) {
110  return showInputDialog(prompt, def, null);
111  }
112 
113 
114  /**
115  * Näytetään dialogi, jossa itse valittava otsikko, kysymysteksti
116  * ja kaksi itse valittavaa painiketta joista 1. on oletus ja toinen cancel
117  * @param title dialogin otsikko
118  * @param question dislogissa oleva kysymys
119  * @param buttonYes kyllä painikkeen teksti
120  * @param buttonNo ei painikkeen teksti
121  * @return true jos painetaan 1. painiketta ja false jos toista
122  * @param alertSetter kutsu, jolla voidaan asettaa arvoja ennen näyttämistä
123  */
124  public static boolean showQuestionDialog(String title, String question,
125  String buttonYes, String buttonNo,
126  AlertSetterInterface alertSetter) {
127  Alert alert = new Alert(AlertType.CONFIRMATION);
128  alert.setTitle(title);
129  alert.setHeaderText(null);
130  alert.setContentText(question);
131 
132  ButtonType buttonTypeYes = new ButtonType(buttonYes, ButtonData.OK_DONE);
133  ButtonType buttonTypeCancel = new ButtonType(buttonNo, ButtonData.CANCEL_CLOSE);
134 
135  alert.getButtonTypes().setAll(buttonTypeYes, buttonTypeCancel);
136 
137  if ( alertSetter != null ) alertSetter.set(alert);
138  Optional<ButtonType> result = alert.showAndWait();
139  return result.get() == buttonTypeYes;
140  }
141 
142 
143  /**
144  * Näytetään dialogi, jossa itse valittava otsikko, kysymysteksti
145  * ja kaksi itse valittavaa painiketta joista 1. on oletus ja toinen cancel
146  * @param title dialogin otsikko
147  * @param question dislogissa oleva kysymys
148  * @param buttonYes kyllä painikkeen teksti
149  * @param buttonNo ei painikkeen teksti
150  * @return true jos painetaan 1. painiketta ja false jos toista
151  */
152  public static boolean showQuestionDialog(String title, String question,
153  String buttonYes, String buttonNo) {
154  return showQuestionDialog(title, question, buttonYes, buttonNo, null);
155  }
156 
157 }