├── LICENSE
├── README.md
├── img
└── javafx-dialogs-screenshots.png
└── javafx-dialogs
├── .classpath
├── .gitignore
├── .project
├── .settings
├── org.eclipse.core.resources.prefs
└── org.eclipse.jdt.core.prefs
├── LICENSE
├── README.md
├── build.xml
├── dist
├── javafx-dialogs-0.0.1.jar
├── javafx-dialogs-0.0.2.jar
├── javafx-dialogs-0.0.3.jar
└── javafx-dialogs-0.0.4.jar
├── pom.xml
├── src
├── com
│ └── sun
│ │ └── javafx
│ │ └── scene
│ │ └── control
│ │ └── skin
│ │ └── resources
│ │ ├── confirm48.png
│ │ ├── dialog-resources.properties
│ │ ├── dialog-resources_es.properties
│ │ ├── error32.png
│ │ ├── error48.png
│ │ ├── info16.png
│ │ ├── info48.png
│ │ ├── java32.png
│ │ ├── java48.png
│ │ ├── security_high.png
│ │ ├── security_low.png
│ │ ├── warning16.png
│ │ ├── warning32.png
│ │ └── warning48.png
└── javafx
│ └── scene
│ └── control
│ ├── Dialogs.java
│ └── dialogs.css
└── test
└── javafx
└── scene
└── control
└── DialogsTest.java
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2013 Marco Jakob (majakob@gmx.ch)
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in
13 | all copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 | THE SOFTWARE.
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # JavaFX UI Sandbox #
2 |
3 | ---
4 | **Note:** If you are using JavaFX 8 you may want to check out the (official) [official JavaFX Dialogs](http://code.makery.ch/blog/javafx-dialogs-official/)!
5 | This is the reason why this project will not be actively developed further and will only work for JavaFX 2.
6 |
7 | ---
8 |
9 |
10 | Oracle has opened up the [JavaFX UI Sandbox repository](http://hg.openjdk.java.net/openjfx/sandbox-8/controls/rt) on OpenJFX as announced on the [fxExperience blog](http://fxexperience.com/2012/10/announcing-the-javafx-ui-controls-sandbox/).
11 | Controls in the OpenJFX repository might eventually be included in a next JavaFX release.
12 |
13 | This GitHub project provides **simple `jar` files** for some of those sandbox controls.
14 |
15 | ## JavaFX Dialogs ##
16 | JavaFX Dialogs are simple dialogs in the style of [JOptionPane](http://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html) from Swing.
17 |
18 | Details about [JavaFX Dialogs](https://github.com/marcojakob/javafx-ui-sandbox/tree/master/javafx-dialogs)
19 |
20 | ---
21 | Marco Jakob (http://edu.makery.ch)
22 |
--------------------------------------------------------------------------------
/img/javafx-dialogs-screenshots.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/marcojakob/javafx-ui-sandbox/9aa947ecb045a6907270cd546b22d88439cf3f58/img/javafx-dialogs-screenshots.png
--------------------------------------------------------------------------------
/javafx-dialogs/.classpath:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/javafx-dialogs/.gitignore:
--------------------------------------------------------------------------------
1 | rt-9e5ef340d95f.zip
2 | target/
3 | bin/
4 | bin-test/
--------------------------------------------------------------------------------
/javafx-dialogs/.project:
--------------------------------------------------------------------------------
1 |
2 |
3 | javafx-dialogs
4 |
5 |
6 |
7 |
8 |
9 | org.eclipse.jdt.core.javabuilder
10 |
11 |
12 |
13 |
14 | org.eclipse.xtext.ui.shared.xtextBuilder
15 |
16 |
17 |
18 |
19 | org.eclipse.m2e.core.maven2Builder
20 |
21 |
22 |
23 |
24 |
25 | org.eclipse.m2e.core.maven2Nature
26 | org.eclipse.xtext.ui.shared.xtextNature
27 | org.eclipse.jdt.core.javanature
28 |
29 |
30 |
--------------------------------------------------------------------------------
/javafx-dialogs/.settings/org.eclipse.core.resources.prefs:
--------------------------------------------------------------------------------
1 | eclipse.preferences.version=1
2 | encoding/=UTF-8
3 |
--------------------------------------------------------------------------------
/javafx-dialogs/.settings/org.eclipse.jdt.core.prefs:
--------------------------------------------------------------------------------
1 | eclipse.preferences.version=1
2 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
3 | org.eclipse.jdt.core.compiler.compliance=1.7
4 | org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
5 | org.eclipse.jdt.core.compiler.source=1.7
6 |
--------------------------------------------------------------------------------
/javafx-dialogs/LICENSE:
--------------------------------------------------------------------------------
1 | The GNU General Public License (GPL)
2 |
3 | Version 2, June 1991
4 |
5 | Copyright (C) 1989, 1991 Free Software Foundation, Inc.
6 | 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
7 |
8 | Everyone is permitted to copy and distribute verbatim copies of this license
9 | document, but changing it is not allowed.
10 |
11 | Preamble
12 |
13 | The licenses for most software are designed to take away your freedom to share
14 | and change it. By contrast, the GNU General Public License is intended to
15 | guarantee your freedom to share and change free software--to make sure the
16 | software is free for all its users. This General Public License applies to
17 | most of the Free Software Foundation's software and to any other program whose
18 | authors commit to using it. (Some other Free Software Foundation software is
19 | covered by the GNU Library General Public License instead.) You can apply it to
20 | your programs, too.
21 |
22 | When we speak of free software, we are referring to freedom, not price. Our
23 | General Public Licenses are designed to make sure that you have the freedom to
24 | distribute copies of free software (and charge for this service if you wish),
25 | that you receive source code or can get it if you want it, that you can change
26 | the software or use pieces of it in new free programs; and that you know you
27 | can do these things.
28 |
29 | To protect your rights, we need to make restrictions that forbid anyone to deny
30 | you these rights or to ask you to surrender the rights. These restrictions
31 | translate to certain responsibilities for you if you distribute copies of the
32 | software, or if you modify it.
33 |
34 | For example, if you distribute copies of such a program, whether gratis or for
35 | a fee, you must give the recipients all the rights that you have. You must
36 | make sure that they, too, receive or can get the source code. And you must
37 | show them these terms so they know their rights.
38 |
39 | We protect your rights with two steps: (1) copyright the software, and (2)
40 | offer you this license which gives you legal permission to copy, distribute
41 | and/or modify the software.
42 |
43 | Also, for each author's protection and ours, we want to make certain that
44 | everyone understands that there is no warranty for this free software. If the
45 | software is modified by someone else and passed on, we want its recipients to
46 | know that what they have is not the original, so that any problems introduced
47 | by others will not reflect on the original authors' reputations.
48 |
49 | Finally, any free program is threatened constantly by software patents. We
50 | wish to avoid the danger that redistributors of a free program will
51 | individually obtain patent licenses, in effect making the program proprietary.
52 | To prevent this, we have made it clear that any patent must be licensed for
53 | everyone's free use or not licensed at all.
54 |
55 | The precise terms and conditions for copying, distribution and modification
56 | follow.
57 |
58 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
59 |
60 | 0. This License applies to any program or other work which contains a notice
61 | placed by the copyright holder saying it may be distributed under the terms of
62 | this General Public License. The "Program", below, refers to any such program
63 | or work, and a "work based on the Program" means either the Program or any
64 | derivative work under copyright law: that is to say, a work containing the
65 | Program or a portion of it, either verbatim or with modifications and/or
66 | translated into another language. (Hereinafter, translation is included
67 | without limitation in the term "modification".) Each licensee is addressed as
68 | "you".
69 |
70 | Activities other than copying, distribution and modification are not covered by
71 | this License; they are outside its scope. The act of running the Program is
72 | not restricted, and the output from the Program is covered only if its contents
73 | constitute a work based on the Program (independent of having been made by
74 | running the Program). Whether that is true depends on what the Program does.
75 |
76 | 1. You may copy and distribute verbatim copies of the Program's source code as
77 | you receive it, in any medium, provided that you conspicuously and
78 | appropriately publish on each copy an appropriate copyright notice and
79 | disclaimer of warranty; keep intact all the notices that refer to this License
80 | and to the absence of any warranty; and give any other recipients of the
81 | Program a copy of this License along with the Program.
82 |
83 | You may charge a fee for the physical act of transferring a copy, and you may
84 | at your option offer warranty protection in exchange for a fee.
85 |
86 | 2. You may modify your copy or copies of the Program or any portion of it, thus
87 | forming a work based on the Program, and copy and distribute such modifications
88 | or work under the terms of Section 1 above, provided that you also meet all of
89 | these conditions:
90 |
91 | a) You must cause the modified files to carry prominent notices stating
92 | that you changed the files and the date of any change.
93 |
94 | b) You must cause any work that you distribute or publish, that in whole or
95 | in part contains or is derived from the Program or any part thereof, to be
96 | licensed as a whole at no charge to all third parties under the terms of
97 | this License.
98 |
99 | c) If the modified program normally reads commands interactively when run,
100 | you must cause it, when started running for such interactive use in the
101 | most ordinary way, to print or display an announcement including an
102 | appropriate copyright notice and a notice that there is no warranty (or
103 | else, saying that you provide a warranty) and that users may redistribute
104 | the program under these conditions, and telling the user how to view a copy
105 | of this License. (Exception: if the Program itself is interactive but does
106 | not normally print such an announcement, your work based on the Program is
107 | not required to print an announcement.)
108 |
109 | These requirements apply to the modified work as a whole. If identifiable
110 | sections of that work are not derived from the Program, and can be reasonably
111 | considered independent and separate works in themselves, then this License, and
112 | its terms, do not apply to those sections when you distribute them as separate
113 | works. But when you distribute the same sections as part of a whole which is a
114 | work based on the Program, the distribution of the whole must be on the terms
115 | of this License, whose permissions for other licensees extend to the entire
116 | whole, and thus to each and every part regardless of who wrote it.
117 |
118 | Thus, it is not the intent of this section to claim rights or contest your
119 | rights to work written entirely by you; rather, the intent is to exercise the
120 | right to control the distribution of derivative or collective works based on
121 | the Program.
122 |
123 | In addition, mere aggregation of another work not based on the Program with the
124 | Program (or with a work based on the Program) on a volume of a storage or
125 | distribution medium does not bring the other work under the scope of this
126 | License.
127 |
128 | 3. You may copy and distribute the Program (or a work based on it, under
129 | Section 2) in object code or executable form under the terms of Sections 1 and
130 | 2 above provided that you also do one of the following:
131 |
132 | a) Accompany it with the complete corresponding machine-readable source
133 | code, which must be distributed under the terms of Sections 1 and 2 above
134 | on a medium customarily used for software interchange; or,
135 |
136 | b) Accompany it with a written offer, valid for at least three years, to
137 | give any third party, for a charge no more than your cost of physically
138 | performing source distribution, a complete machine-readable copy of the
139 | corresponding source code, to be distributed under the terms of Sections 1
140 | and 2 above on a medium customarily used for software interchange; or,
141 |
142 | c) Accompany it with the information you received as to the offer to
143 | distribute corresponding source code. (This alternative is allowed only
144 | for noncommercial distribution and only if you received the program in
145 | object code or executable form with such an offer, in accord with
146 | Subsection b above.)
147 |
148 | The source code for a work means the preferred form of the work for making
149 | modifications to it. For an executable work, complete source code means all
150 | the source code for all modules it contains, plus any associated interface
151 | definition files, plus the scripts used to control compilation and installation
152 | of the executable. However, as a special exception, the source code
153 | distributed need not include anything that is normally distributed (in either
154 | source or binary form) with the major components (compiler, kernel, and so on)
155 | of the operating system on which the executable runs, unless that component
156 | itself accompanies the executable.
157 |
158 | If distribution of executable or object code is made by offering access to copy
159 | from a designated place, then offering equivalent access to copy the source
160 | code from the same place counts as distribution of the source code, even though
161 | third parties are not compelled to copy the source along with the object code.
162 |
163 | 4. You may not copy, modify, sublicense, or distribute the Program except as
164 | expressly provided under this License. Any attempt otherwise to copy, modify,
165 | sublicense or distribute the Program is void, and will automatically terminate
166 | your rights under this License. However, parties who have received copies, or
167 | rights, from you under this License will not have their licenses terminated so
168 | long as such parties remain in full compliance.
169 |
170 | 5. You are not required to accept this License, since you have not signed it.
171 | However, nothing else grants you permission to modify or distribute the Program
172 | or its derivative works. These actions are prohibited by law if you do not
173 | accept this License. Therefore, by modifying or distributing the Program (or
174 | any work based on the Program), you indicate your acceptance of this License to
175 | do so, and all its terms and conditions for copying, distributing or modifying
176 | the Program or works based on it.
177 |
178 | 6. Each time you redistribute the Program (or any work based on the Program),
179 | the recipient automatically receives a license from the original licensor to
180 | copy, distribute or modify the Program subject to these terms and conditions.
181 | You may not impose any further restrictions on the recipients' exercise of the
182 | rights granted herein. You are not responsible for enforcing compliance by
183 | third parties to this License.
184 |
185 | 7. If, as a consequence of a court judgment or allegation of patent
186 | infringement or for any other reason (not limited to patent issues), conditions
187 | are imposed on you (whether by court order, agreement or otherwise) that
188 | contradict the conditions of this License, they do not excuse you from the
189 | conditions of this License. If you cannot distribute so as to satisfy
190 | simultaneously your obligations under this License and any other pertinent
191 | obligations, then as a consequence you may not distribute the Program at all.
192 | For example, if a patent license would not permit royalty-free redistribution
193 | of the Program by all those who receive copies directly or indirectly through
194 | you, then the only way you could satisfy both it and this License would be to
195 | refrain entirely from distribution of the Program.
196 |
197 | If any portion of this section is held invalid or unenforceable under any
198 | particular circumstance, the balance of the section is intended to apply and
199 | the section as a whole is intended to apply in other circumstances.
200 |
201 | It is not the purpose of this section to induce you to infringe any patents or
202 | other property right claims or to contest validity of any such claims; this
203 | section has the sole purpose of protecting the integrity of the free software
204 | distribution system, which is implemented by public license practices. Many
205 | people have made generous contributions to the wide range of software
206 | distributed through that system in reliance on consistent application of that
207 | system; it is up to the author/donor to decide if he or she is willing to
208 | distribute software through any other system and a licensee cannot impose that
209 | choice.
210 |
211 | This section is intended to make thoroughly clear what is believed to be a
212 | consequence of the rest of this License.
213 |
214 | 8. If the distribution and/or use of the Program is restricted in certain
215 | countries either by patents or by copyrighted interfaces, the original
216 | copyright holder who places the Program under this License may add an explicit
217 | geographical distribution limitation excluding those countries, so that
218 | distribution is permitted only in or among countries not thus excluded. In
219 | such case, this License incorporates the limitation as if written in the body
220 | of this License.
221 |
222 | 9. The Free Software Foundation may publish revised and/or new versions of the
223 | General Public License from time to time. Such new versions will be similar in
224 | spirit to the present version, but may differ in detail to address new problems
225 | or concerns.
226 |
227 | Each version is given a distinguishing version number. If the Program
228 | specifies a version number of this License which applies to it and "any later
229 | version", you have the option of following the terms and conditions either of
230 | that version or of any later version published by the Free Software Foundation.
231 | If the Program does not specify a version number of this License, you may
232 | choose any version ever published by the Free Software Foundation.
233 |
234 | 10. If you wish to incorporate parts of the Program into other free programs
235 | whose distribution conditions are different, write to the author to ask for
236 | permission. For software which is copyrighted by the Free Software Foundation,
237 | write to the Free Software Foundation; we sometimes make exceptions for this.
238 | Our decision will be guided by the two goals of preserving the free status of
239 | all derivatives of our free software and of promoting the sharing and reuse of
240 | software generally.
241 |
242 | NO WARRANTY
243 |
244 | 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR
245 | THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE
246 | STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE
247 | PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
248 | INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
249 | FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
250 | PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE,
251 | YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
252 |
253 | 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL
254 | ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE
255 | PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
256 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
257 | INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
258 | BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
259 | FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER
260 | OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
261 |
262 | END OF TERMS AND CONDITIONS
263 |
264 | How to Apply These Terms to Your New Programs
265 |
266 | If you develop a new program, and you want it to be of the greatest possible
267 | use to the public, the best way to achieve this is to make it free software
268 | which everyone can redistribute and change under these terms.
269 |
270 | To do so, attach the following notices to the program. It is safest to attach
271 | them to the start of each source file to most effectively convey the exclusion
272 | of warranty; and each file should have at least the "copyright" line and a
273 | pointer to where the full notice is found.
274 |
275 | One line to give the program's name and a brief idea of what it does.
276 |
277 | Copyright (C)
278 |
279 | This program is free software; you can redistribute it and/or modify it
280 | under the terms of the GNU General Public License as published by the Free
281 | Software Foundation; either version 2 of the License, or (at your option)
282 | any later version.
283 |
284 | This program is distributed in the hope that it will be useful, but WITHOUT
285 | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
286 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
287 | more details.
288 |
289 | You should have received a copy of the GNU General Public License along
290 | with this program; if not, write to the Free Software Foundation, Inc., 59
291 | Temple Place, Suite 330, Boston, MA 02111-1307 USA
292 |
293 | Also add information on how to contact you by electronic and paper mail.
294 |
295 | If the program is interactive, make it output a short notice like this when it
296 | starts in an interactive mode:
297 |
298 | Gnomovision version 69, Copyright (C) year name of author Gnomovision comes
299 | with ABSOLUTELY NO WARRANTY; for details type 'show w'. This is free
300 | software, and you are welcome to redistribute it under certain conditions;
301 | type 'show c' for details.
302 |
303 | The hypothetical commands 'show w' and 'show c' should show the appropriate
304 | parts of the General Public License. Of course, the commands you use may be
305 | called something other than 'show w' and 'show c'; they could even be
306 | mouse-clicks or menu items--whatever suits your program.
307 |
308 | You should also get your employer (if you work as a programmer) or your school,
309 | if any, to sign a "copyright disclaimer" for the program, if necessary. Here
310 | is a sample; alter the names:
311 |
312 | Yoyodyne, Inc., hereby disclaims all copyright interest in the program
313 | 'Gnomovision' (which makes passes at compilers) written by James Hacker.
314 |
315 | signature of Ty Coon, 1 April 1989
316 |
317 | Ty Coon, President of Vice
318 |
319 | This General Public License does not permit incorporating your program into
320 | proprietary programs. If your program is a subroutine library, you may
321 | consider it more useful to permit linking proprietary applications with the
322 | library. If this is what you want to do, use the GNU Library General Public
323 | License instead of this License.
324 |
325 |
326 | "CLASSPATH" EXCEPTION TO THE GPL
327 |
328 | Certain source files distributed by Oracle America and/or its affiliates are
329 | subject to the following clarification and special exception to the GPL, but
330 | only where Oracle has expressly included in the particular source file's header
331 | the words "Oracle designates this particular file as subject to the "Classpath"
332 | exception as provided by Oracle in the LICENSE file that accompanied this code."
333 |
334 | Linking this library statically or dynamically with other modules is making
335 | a combined work based on this library. Thus, the terms and conditions of
336 | the GNU General Public License cover the whole combination.
337 |
338 | As a special exception, the copyright holders of this library give you
339 | permission to link this library with independent modules to produce an
340 | executable, regardless of the license terms of these independent modules,
341 | and to copy and distribute the resulting executable under terms of your
342 | choice, provided that you also meet, for each linked independent module,
343 | the terms and conditions of the license of that module. An independent
344 | module is a module which is not derived from or based on this library. If
345 | you modify this library, you may extend this exception to your version of
346 | the library, but you are not obligated to do so. If you do not wish to do
347 | so, delete this exception statement from your version.
348 |
--------------------------------------------------------------------------------
/javafx-dialogs/README.md:
--------------------------------------------------------------------------------
1 | ## JavaFX Dialogs ##
2 |
3 | ---
4 | **Note:** If you are using JavaFX 8 you may want to check out the [JavaFX 8 Dialogs blog post](http://code.makery.ch/blog/javafx-dialogs-official/) which explains how to use the official JavaFX Dialogs!
5 |
6 | ---
7 |
8 | JavaFX Dialogs are simple dialogs in the style of [JOptionPane](http://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html) from Swing.
9 |
10 | 
11 | *Image Source: http://fxexperience.com/2012/10/announcing-the-javafx-ui-controls-sandbox/*
12 |
13 | ### Usage ###
14 | For examples of how to use them see this [JavaFX 2 Dialog blog post](http://code.makery.ch/blog/javafx-2-dialogs/).
15 |
16 | ### Download Jar ###
17 |
18 | * [Browse all versions](https://github.com/marcojakob/javafx-ui-sandbox/tree/master/javafx-dialogs/dist)
19 | * [Download newest version](https://github.com/marcojakob/javafx-ui-sandbox/raw/master/javafx-dialogs/dist/javafx-dialogs-0.0.3.jar)
20 |
21 | ### Changes ###
22 |
23 | #### JavaFX Dialogs 0.0.3 ####
24 | * Enhancement: Custom Dialogs [Issue #1](https://github.com/marcojakob/javafx-ui-sandbox/issues/1)
25 |
26 | #### JavaFX Dialogs 0.0.2 ####
27 | * Fixed bug: Images fail to load when running in webstart. https://github.com/marcojakob/javafx-ui-sandbox/issues/2
28 |
29 | #### JavaFX Dialogs 0.0.1 ####
30 | JavaFX Dialogs is based on revision [rt-9e5ef340d95f](http://hg.openjdk.java.net/openjfx/sandbox-8/controls/rt/rev/9e5ef340d95f) of the official Open JFX Sandbox Dialogs.
31 | The following changes were made to Dialogs.java:
32 | * Use of a separate css file
33 | * Fixed bug: Input dialog did only return String from text box if enter was used. Buttons
34 | did not work.
35 | * Fixed bug: Input dialog with input choices did not return the initially selected object
36 | if the combo box was not changed by the user.
37 | * Fixed bug: Message was not displayed in error dialogs.
38 | * Using binding for user input response.
39 |
40 | ---
41 | Marco Jakob (http://edu.makery.ch)
42 |
43 |
--------------------------------------------------------------------------------
/javafx-dialogs/build.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 0.0.4
4 |
5 | dist
6 | javafx-dialogs-${version}.jar
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/javafx-dialogs/dist/javafx-dialogs-0.0.1.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/marcojakob/javafx-ui-sandbox/9aa947ecb045a6907270cd546b22d88439cf3f58/javafx-dialogs/dist/javafx-dialogs-0.0.1.jar
--------------------------------------------------------------------------------
/javafx-dialogs/dist/javafx-dialogs-0.0.2.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/marcojakob/javafx-ui-sandbox/9aa947ecb045a6907270cd546b22d88439cf3f58/javafx-dialogs/dist/javafx-dialogs-0.0.2.jar
--------------------------------------------------------------------------------
/javafx-dialogs/dist/javafx-dialogs-0.0.3.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/marcojakob/javafx-ui-sandbox/9aa947ecb045a6907270cd546b22d88439cf3f58/javafx-dialogs/dist/javafx-dialogs-0.0.3.jar
--------------------------------------------------------------------------------
/javafx-dialogs/dist/javafx-dialogs-0.0.4.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/marcojakob/javafx-ui-sandbox/9aa947ecb045a6907270cd546b22d88439cf3f58/javafx-dialogs/dist/javafx-dialogs-0.0.4.jar
--------------------------------------------------------------------------------
/javafx-dialogs/pom.xml:
--------------------------------------------------------------------------------
1 |
3 | 4.0.0
4 | javafx-ui-sandbox
5 | javafx-dialogs
6 | 0.0.3
7 | JavaFX UI Sandbox Dialogs
8 | JavaFX Dialogs are simple dialogs in the style of JOptionPane from Swing.
9 |
10 | src
11 | test
12 |
13 |
14 | src
15 |
16 | **/*.java
17 |
18 |
19 |
20 |
21 |
22 | maven-compiler-plugin
23 | 3.0
24 |
25 | 1.7
26 | 1.7
27 |
28 |
29 |
30 | maven-deploy-plugin
31 | 2.7
32 |
33 | internal.repo::default::file://${project.build.directory}/mvn-repo
34 |
35 |
36 |
37 | com.github.github
38 | site-maven-plugin
39 | 0.8
40 |
41 | Maven artifacts for ${project.version}
42 | true
43 | ${project.build.directory}/mvn-repo
44 | refs/heads/mvn-repo
45 |
46 | **/*
47 |
48 | javafx-ui-sandbox
49 | mbsanchez
50 |
51 |
52 |
54 |
55 |
56 | site
57 |
58 | deploy
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 | com.oracle
67 | javafx
68 | 2.2
69 | ${java.home}/lib/jfxrt.jar
70 | system
71 |
72 |
73 |
74 |
75 | github
76 | GitHub ${project.artifactId} Repository
77 | https://raw.github.com/mbsanchez/javafx-ui-sandbox/mvn-repo
78 |
79 |
80 |
81 | github
82 |
83 |
--------------------------------------------------------------------------------
/javafx-dialogs/src/com/sun/javafx/scene/control/skin/resources/confirm48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/marcojakob/javafx-ui-sandbox/9aa947ecb045a6907270cd546b22d88439cf3f58/javafx-dialogs/src/com/sun/javafx/scene/control/skin/resources/confirm48.png
--------------------------------------------------------------------------------
/javafx-dialogs/src/com/sun/javafx/scene/control/skin/resources/dialog-resources.properties:
--------------------------------------------------------------------------------
1 | # FXAboutDialog
2 | about.java.image = /com/sun/javafx/scene/control/skin/resources/aboutjava.png
3 | about.java6.image = /com/sun/javafx/scene/control/skin/resources/aboutjava.png
4 | sun.logo.image = /com/sun/javafx/scene/control/skin/resources/about-OracleLogo.png
5 |
6 | # DialogTemplate
7 | security.alert.high.image = /com/sun/javafx/scene/control/skin/resources/security_high.png
8 | security.alert.low.image = /com/sun/javafx/scene/control/skin/resources/security_low.png
9 |
10 | # MoreInfoDialog
11 | warning16.image = /com/sun/javafx/scene/control/skin/resources/warning16.png
12 | warning48.image = /com/sun/javafx/scene/control/skin/resources/warning48.png
13 | info16.image = /com/sun/javafx/scene/control/skin/resources/info16.png
14 | info48.image = /com/sun/javafx/scene/control/skin/resources/info48.png
15 | #security.dialog.caption.run.question = Do you want to run the application?
16 | #security.dialog.caption.continue.question = Do you want to continue?
17 | #preloader.loading = Loading...
18 |
19 | # ErrorPane
20 | #error.pane.message = Runtime error. Click for details.
21 | #error.pane.icon = /com/sun/javafx/scene/control/skin/resources/graybox_error.png
22 |
23 | java48.image = /com/sun/javafx/scene/control/skin/resources/java48.png
24 |
25 | #error32.image = /com/sun/javafx/scene/control/skin/resources/error32.png
26 | error48.image = /com/sun/javafx/scene/control/skin/resources/error48.png
27 |
28 | confirm48.image = /com/sun/javafx/scene/control/skin/resources/confirm48.png
29 |
30 |
31 |
32 |
33 | common.ok.btn = Ok
34 | common.cancel.btn = Cancel
35 | common.yes.btn = Yes
36 | common.no.btn = No
37 | common.close.btn = Close
38 | common.detail.button = Details...
39 |
40 | exception.dialog.title = Exception Details
41 | exception.dialog.label = The exception stacktrace was:
--------------------------------------------------------------------------------
/javafx-dialogs/src/com/sun/javafx/scene/control/skin/resources/dialog-resources_es.properties:
--------------------------------------------------------------------------------
1 | #Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net)
2 | # FXAboutDialog
3 | about.java.image = /com/sun/javafx/scene/control/skin/resources/aboutjava.png
4 | about.java6.image = /com/sun/javafx/scene/control/skin/resources/aboutjava.png
5 |
6 | #Buttons
7 | common.cancel.btn = Cancelar
8 | common.close.btn = Cerrar
9 | common.detail.button = Detalles...
10 | common.no.btn = No
11 | common.ok.btn = Ok
12 | common.yes.btn = Si
13 |
14 | confirm48.image = /com/sun/javafx/scene/control/skin/resources/confirm48.png
15 |
16 | error48.image = /com/sun/javafx/scene/control/skin/resources/error48.png
17 |
18 | exception.dialog.label = La pila de llamadas de la excepci\u00F3n es:
19 | exception.dialog.title = Detalles de la Excepci\u00F3n
20 |
21 | info16.image = /com/sun/javafx/scene/control/skin/resources/info16.png
22 |
23 | info48.image = /com/sun/javafx/scene/control/skin/resources/info48.png
24 |
25 | java48.image = /com/sun/javafx/scene/control/skin/resources/java48.png
26 |
27 | # DialogTemplate
28 | security.alert.high.image = /com/sun/javafx/scene/control/skin/resources/security_high.png
29 | security.alert.low.image = /com/sun/javafx/scene/control/skin/resources/security_low.png
30 |
31 | sun.logo.image = /com/sun/javafx/scene/control/skin/resources/about-OracleLogo.png
32 |
33 | # MoreInfoDialog
34 | warning16.image = /com/sun/javafx/scene/control/skin/resources/warning16.png
35 |
36 | warning48.image = /com/sun/javafx/scene/control/skin/resources/warning48.png
37 |
--------------------------------------------------------------------------------
/javafx-dialogs/src/com/sun/javafx/scene/control/skin/resources/error32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/marcojakob/javafx-ui-sandbox/9aa947ecb045a6907270cd546b22d88439cf3f58/javafx-dialogs/src/com/sun/javafx/scene/control/skin/resources/error32.png
--------------------------------------------------------------------------------
/javafx-dialogs/src/com/sun/javafx/scene/control/skin/resources/error48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/marcojakob/javafx-ui-sandbox/9aa947ecb045a6907270cd546b22d88439cf3f58/javafx-dialogs/src/com/sun/javafx/scene/control/skin/resources/error48.png
--------------------------------------------------------------------------------
/javafx-dialogs/src/com/sun/javafx/scene/control/skin/resources/info16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/marcojakob/javafx-ui-sandbox/9aa947ecb045a6907270cd546b22d88439cf3f58/javafx-dialogs/src/com/sun/javafx/scene/control/skin/resources/info16.png
--------------------------------------------------------------------------------
/javafx-dialogs/src/com/sun/javafx/scene/control/skin/resources/info48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/marcojakob/javafx-ui-sandbox/9aa947ecb045a6907270cd546b22d88439cf3f58/javafx-dialogs/src/com/sun/javafx/scene/control/skin/resources/info48.png
--------------------------------------------------------------------------------
/javafx-dialogs/src/com/sun/javafx/scene/control/skin/resources/java32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/marcojakob/javafx-ui-sandbox/9aa947ecb045a6907270cd546b22d88439cf3f58/javafx-dialogs/src/com/sun/javafx/scene/control/skin/resources/java32.png
--------------------------------------------------------------------------------
/javafx-dialogs/src/com/sun/javafx/scene/control/skin/resources/java48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/marcojakob/javafx-ui-sandbox/9aa947ecb045a6907270cd546b22d88439cf3f58/javafx-dialogs/src/com/sun/javafx/scene/control/skin/resources/java48.png
--------------------------------------------------------------------------------
/javafx-dialogs/src/com/sun/javafx/scene/control/skin/resources/security_high.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/marcojakob/javafx-ui-sandbox/9aa947ecb045a6907270cd546b22d88439cf3f58/javafx-dialogs/src/com/sun/javafx/scene/control/skin/resources/security_high.png
--------------------------------------------------------------------------------
/javafx-dialogs/src/com/sun/javafx/scene/control/skin/resources/security_low.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/marcojakob/javafx-ui-sandbox/9aa947ecb045a6907270cd546b22d88439cf3f58/javafx-dialogs/src/com/sun/javafx/scene/control/skin/resources/security_low.png
--------------------------------------------------------------------------------
/javafx-dialogs/src/com/sun/javafx/scene/control/skin/resources/warning16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/marcojakob/javafx-ui-sandbox/9aa947ecb045a6907270cd546b22d88439cf3f58/javafx-dialogs/src/com/sun/javafx/scene/control/skin/resources/warning16.png
--------------------------------------------------------------------------------
/javafx-dialogs/src/com/sun/javafx/scene/control/skin/resources/warning32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/marcojakob/javafx-ui-sandbox/9aa947ecb045a6907270cd546b22d88439cf3f58/javafx-dialogs/src/com/sun/javafx/scene/control/skin/resources/warning32.png
--------------------------------------------------------------------------------
/javafx-dialogs/src/com/sun/javafx/scene/control/skin/resources/warning48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/marcojakob/javafx-ui-sandbox/9aa947ecb045a6907270cd546b22d88439cf3f58/javafx-dialogs/src/com/sun/javafx/scene/control/skin/resources/warning48.png
--------------------------------------------------------------------------------
/javafx-dialogs/src/javafx/scene/control/Dialogs.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
3 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 | *
5 | * This code is free software; you can redistribute it and/or modify it
6 | * under the terms of the GNU General Public License version 2 only, as
7 | * published by the Free Software Foundation. Oracle designates this
8 | * particular file as subject to the "Classpath" exception as provided
9 | * by Oracle in the LICENSE file that accompanied this code.
10 | *
11 | * This code is distributed in the hope that it will be useful, but WITHOUT
12 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 | * version 2 for more details (a copy is included in the LICENSE file that
15 | * accompanied this code).
16 | *
17 | * You should have received a copy of the GNU General Public License version
18 | * 2 along with this work; if not, write to the Free Software Foundation,
19 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 | *
21 | * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 | * or visit www.oracle.com if you need additional information or have any
23 | * questions.
24 | */
25 | package javafx.scene.control;
26 |
27 |
28 | import static javafx.scene.control.Dialogs.DialogResources.getIcon;
29 | import static javafx.scene.control.Dialogs.DialogResources.getMessage;
30 | import static javafx.scene.control.Dialogs.DialogResources.getString;
31 | import static javafx.scene.control.Dialogs.DialogResponse.CLOSED;
32 | import static javafx.scene.control.Dialogs.DialogResponse.OK;
33 |
34 | import java.io.PrintWriter;
35 | import java.io.StringWriter;
36 | import java.net.URL;
37 | import java.security.AccessController;
38 | import java.security.PrivilegedAction;
39 | import java.security.PrivilegedExceptionAction;
40 | import java.text.MessageFormat;
41 | import java.util.Arrays;
42 | import java.util.Collections;
43 | import java.util.List;
44 | import java.util.MissingResourceException;
45 | import java.util.ResourceBundle;
46 |
47 | import javafx.application.Platform;
48 | import javafx.beans.InvalidationListener;
49 | import javafx.beans.Observable;
50 | import javafx.beans.property.Property;
51 | import javafx.beans.property.SimpleObjectProperty;
52 | import javafx.beans.value.ObservableValue;
53 | import javafx.collections.FXCollections;
54 | import javafx.collections.ObservableList;
55 | import javafx.event.ActionEvent;
56 | import javafx.event.Event;
57 | import javafx.event.EventHandler;
58 | import javafx.event.EventType;
59 | import javafx.geometry.Insets;
60 | import javafx.geometry.Point2D;
61 | import javafx.geometry.Pos;
62 | import javafx.scene.Node;
63 | import javafx.scene.Scene;
64 | import javafx.scene.image.Image;
65 | import javafx.scene.image.ImageView;
66 | import javafx.scene.input.MouseEvent;
67 | import javafx.scene.layout.BorderPane;
68 | import javafx.scene.layout.FlowPane;
69 | import javafx.scene.layout.HBox;
70 | import javafx.scene.layout.Pane;
71 | import javafx.scene.layout.Priority;
72 | import javafx.scene.layout.Region;
73 | import javafx.scene.layout.StackPane;
74 | import javafx.scene.layout.VBox;
75 | import javafx.scene.paint.Color;
76 | import javafx.scene.shape.Rectangle;
77 | import javafx.stage.Modality;
78 | import javafx.stage.Screen;
79 | import javafx.stage.Stage;
80 | import javafx.stage.StageStyle;
81 | import javafx.stage.Window;
82 | import javafx.util.Callback;
83 |
84 | import com.sun.javafx.css.StyleManager;
85 |
86 | /**
87 | * A class containing a number of pre-built JavaFX modal dialogs.
88 | *
89 | * Note: This is a copy of the official OpenJFX UI Sandbox Control revision rt-9e5ef340d95f.
90 | * Changes are marked and described in the readme file.
91 | *
92 | * @author OpenJFX Authors
93 | * @author Marco Jakob (http://edu.makery.ch)
94 | */
95 | public class Dialogs {
96 |
97 | // !CHANGE START! use a separate css file
98 | private static final URL DIALOGS_CSS_URL = FXDialog.class.getResource("dialogs.css");
99 | // !CHANGE END!
100 |
101 |
102 | /***************************************************************************
103 | * *
104 | * Public static support classes / enums *
105 | * *
106 | **************************************************************************/
107 |
108 | /**
109 | * An enumeration used to specify the response provided by the user when
110 | * interacting with a dialog.
111 | */
112 | public static enum DialogResponse {
113 | /**
114 | * Used to represent that the user has selected the option corresponding
115 | * with YES.
116 | */
117 | YES,
118 |
119 | /**
120 | * Used to represent that the user has selected the option corresponding
121 | * with NO.
122 | */
123 | NO,
124 |
125 | /**
126 | * Used to represent that the user has selected the option corresponding
127 | * with CANCEL.
128 | */
129 | CANCEL,
130 |
131 | /**
132 | * Used to represent that the user has selected the option corresponding
133 | * with OK.
134 | */
135 | OK,
136 |
137 | /**
138 | * Used to represent that the user has selected the option corresponding
139 | * with CLOSED.
140 | */
141 | CLOSED
142 | }
143 |
144 | /**
145 | * An enumeration used to specify which buttons to show to the user in a
146 | * dialog.
147 | */
148 | public static enum DialogOptions {
149 | /**
150 | * Used to specify that two buttons should be shown, with default labels
151 | * specified as 'Yes' and 'No'.
152 | */
153 | YES_NO,
154 |
155 | /**
156 | * Used to specify that three buttons should be shown, with default labels
157 | * specified as 'Yes', 'No', and 'Cancel'.
158 | */
159 | YES_NO_CANCEL,
160 |
161 | /**
162 | * Used to specify that one button should be shown, with the default label
163 | * specified as 'Ok'.
164 | */
165 | OK,
166 |
167 | /**
168 | * Used to specify that two buttons should be shown, with default labels
169 | * specified as 'Ok' and 'Cancel'.
170 | */
171 | OK_CANCEL;
172 | }
173 |
174 |
175 |
176 | /***************************************************************************
177 | * *
178 | * Constructors *
179 | * *
180 | **************************************************************************/
181 |
182 | private Dialogs() {
183 | // no-op as we don't want people creating instances of this class
184 | }
185 |
186 |
187 |
188 | /***************************************************************************
189 | * *
190 | * Confirmation Dialogs *
191 | * *
192 | **************************************************************************/
193 |
194 | /**
195 | * Brings up a dialog with the options Yes, No and Cancel; with the title,
196 | * Select an Option.
197 | *
198 | * @param owner
199 | * @param message
200 | * @return
201 | */
202 | public static DialogResponse showConfirmDialog(final Stage owner, final String message) {
203 | return showConfirmDialog(owner,
204 | message,
205 | DialogType.CONFIRMATION.getDefaultMasthead());
206 | }
207 |
208 | public static DialogResponse showConfirmDialog(final Stage owner, final String message,
209 | final String masthead) {
210 | return showConfirmDialog(owner,
211 | message,
212 | masthead,
213 | DialogType.CONFIRMATION.getDefaultTitle());
214 | }
215 |
216 | public static DialogResponse showConfirmDialog(final Stage owner, final String message,
217 | final String masthead, final String title) {
218 | return showConfirmDialog(owner,
219 | message,
220 | masthead,
221 | title,
222 | DialogType.CONFIRMATION.getDefaultOptions());
223 | }
224 |
225 | public static DialogResponse showConfirmDialog(final Stage owner, final String message,
226 | final String masthead, final String title, final DialogOptions options) {
227 | return showSimpleContentDialog(owner,
228 | title,
229 | masthead,
230 | message,
231 | DialogType.CONFIRMATION,
232 | options);
233 | }
234 |
235 |
236 |
237 | /***************************************************************************
238 | * *
239 | * Information Dialogs *
240 | * *
241 | **************************************************************************/
242 |
243 | public static void showInformationDialog(final Stage owner,
244 | final String message) {
245 | showInformationDialog(owner,
246 | message,
247 | DialogType.INFORMATION.getDefaultMasthead());
248 | }
249 |
250 | public static void showInformationDialog(final Stage owner, final String message,
251 | final String masthead){
252 | showInformationDialog(owner,
253 | message,
254 | masthead,
255 | DialogType.INFORMATION.getDefaultTitle());
256 | }
257 |
258 | /*
259 | * Info message string displayed in the masthead
260 | * Info icon 48x48 displayed in the masthead
261 | * "OK" button at the bottom.
262 | *
263 | * text and title strings are already translated strings.
264 | */
265 | public static void showInformationDialog(final Stage owner, final String message,
266 | final String masthead, final String title){
267 | showSimpleContentDialog(owner,
268 | title,
269 | masthead,
270 | message,
271 | DialogType.INFORMATION,
272 | DialogType.INFORMATION.getDefaultOptions());
273 | }
274 |
275 |
276 |
277 | /***************************************************************************
278 | * *
279 | * Warning Dialogs *
280 | * *
281 | **************************************************************************/
282 |
283 | /**
284 | * showWarningDialog - displays warning icon instead of "Java" logo icon
285 | * in the upper right corner of masthead. Has masthead
286 | * and message that is displayed in the middle part
287 | * of the dialog. No bullet is displayed.
288 | *
289 | *
290 | * @param owner - Component to parent the dialog to
291 | * @param appInfo - AppInfo object
292 | * @param masthead - masthead in the top part of the dialog
293 | * @param message - question to display in the middle part
294 | * @param title - dialog title string from resource bundle
295 | *
296 | */
297 | public static DialogResponse showWarningDialog(final Stage owner, final String message) {
298 | return showWarningDialog(owner,
299 | message,
300 | DialogType.WARNING.getDefaultMasthead());
301 | }
302 |
303 | public static DialogResponse showWarningDialog(final Stage owner, final String message,
304 | final String masthead) {
305 | return showWarningDialog(owner,
306 | message,
307 | masthead,
308 | DialogType.WARNING.getDefaultTitle());
309 | }
310 |
311 | public static DialogResponse showWarningDialog(final Stage owner, final String message,
312 | final String masthead, final String title) {
313 | return showWarningDialog(owner,
314 | message,
315 | masthead,
316 | title,
317 | DialogType.WARNING.getDefaultOptions());
318 | }
319 |
320 | public static DialogResponse showWarningDialog(final Stage owner, final String message,
321 | final String masthead, final String title,
322 | DialogOptions options) {
323 | return showSimpleContentDialog(owner,
324 | title,
325 | masthead,
326 | message,
327 | DialogType.WARNING,
328 | options);
329 | }
330 |
331 |
332 |
333 | /***************************************************************************
334 | * *
335 | * Exception / Error Dialogs *
336 | * *
337 | **************************************************************************/
338 |
339 | public static DialogResponse showErrorDialog(final Stage owner, final String message) {
340 | return showErrorDialog(owner,
341 | message,
342 | DialogType.ERROR.getDefaultMasthead());
343 | }
344 |
345 | public static DialogResponse showErrorDialog(final Stage owner, final String message,
346 | final String masthead) {
347 | return showErrorDialog(owner,
348 | message,
349 | masthead,
350 | masthead);
351 | }
352 |
353 | public static DialogResponse showErrorDialog(final Stage owner, final String message,
354 | final String masthead, final String title) {
355 | return showErrorDialog(owner,
356 | message,
357 | masthead,
358 | title,
359 | DialogType.ERROR.getDefaultOptions());
360 | }
361 |
362 | public static DialogResponse showErrorDialog(final Stage owner, final String message,
363 | final String masthead, final String title,
364 | DialogOptions options) {
365 | return showSimpleContentDialog(owner,
366 | title,
367 | masthead,
368 | message,
369 | DialogType.ERROR,
370 | options);
371 | }
372 |
373 | public static DialogResponse showErrorDialog(final Stage owner, final String message,
374 | final String masthead, final String title,
375 | final Throwable throwable) {
376 |
377 | DialogTemplate template = new DialogTemplate(owner, title, masthead, null);
378 | template.setErrorContent(message, throwable);
379 | return showDialog(template);
380 | }
381 |
382 |
383 |
384 | /***************************************************************************
385 | * *
386 | * User Input Dialogs *
387 | * *
388 | **************************************************************************/
389 |
390 | public static String showInputDialog(final Stage owner, final String message) {
391 | return showInputDialog(owner, message, "Masthead");
392 | }
393 |
394 | public static String showInputDialog(final Stage owner, final String message,
395 | final String masthead) {
396 | return showInputDialog(owner, message, masthead, "Title");
397 | }
398 |
399 | public static String showInputDialog(final Stage owner, final String message,
400 | final String masthead, final String title) {
401 | return showInputDialog(owner, message, masthead, title, null);
402 | }
403 |
404 | public static String showInputDialog(final Stage owner, final String message,
405 | final String masthead, final String title,
406 | final String initialValue) {
407 | return showInputDialog(owner, message, masthead, title, initialValue, Collections.emptyList());
408 | }
409 |
410 | public static T showInputDialog(final Stage owner, final String message,
411 | final String masthead, final String title,
412 | final T initialValue, final T... choices) {
413 | return showInputDialog(owner, message, masthead, title, initialValue, Arrays.asList(choices));
414 | }
415 |
416 | public static T showInputDialog(final Stage owner, final String message,
417 | final String masthead, final String title,
418 | final T initialValue, final List choices) {
419 | DialogTemplate template = new DialogTemplate(owner, title, masthead, null);
420 | template.setInputContent(message, initialValue, choices);
421 | return showUserInputDialog(template);
422 | }
423 |
424 | /***************************************************************************
425 | * *
426 | * Custom Content Dialog *
427 | * *
428 | **************************************************************************/
429 |
430 | //Provided Pane is inserted in the content panel. Provided callback is added to buttons' onAction handler.
431 | public static DialogResponse showCustomDialog(final Stage owner, final Pane customContentPanel, final String masthead, final String title, DialogOptions options, Callback callback) {
432 | DialogTemplate template = new DialogTemplate(owner, customContentPanel, title, masthead, options); //DialogType.CUSTOM.defaultOptions);
433 | template.setCustomContent(customContentPanel);
434 | template.setCustomCallback(callback);
435 | return showCustomDialog(template);
436 | }
437 |
438 |
439 |
440 |
441 | /***************************************************************************
442 | * *
443 | * Private API *
444 | * *
445 | **************************************************************************/
446 |
447 | // NOT PUBLIC API
448 | static enum DialogType {
449 | ERROR(DialogOptions.OK, "error48.image") {
450 | @Override public String getDefaultMasthead() { return "Error"; }
451 | },
452 | INFORMATION(DialogOptions.OK, "info48.image") {
453 | @Override public String getDefaultMasthead() { return "Message"; }
454 | },
455 | WARNING(DialogOptions.OK, "warning48.image") {
456 | @Override public String getDefaultMasthead() { return "Warning"; }
457 | },
458 | CONFIRMATION(DialogOptions.YES_NO_CANCEL, "confirm48.image") {
459 | @Override public String getDefaultMasthead() { return "Select an Option"; }
460 | },
461 | INPUT(DialogOptions.OK_CANCEL, "confirm48.image") {
462 | @Override public String getDefaultMasthead() { return "Select an Option"; }
463 | },
464 | CUSTOM(DialogOptions.OK, "info48.image") {
465 | @Override public String getDefaultMasthead() { return "Message"; }
466 | };
467 |
468 | private final DialogOptions defaultOptions;
469 | private final String imageResource;
470 |
471 | DialogType(DialogOptions defaultOptions, String imageResource) {
472 | this.defaultOptions = defaultOptions;
473 | this.imageResource = imageResource;
474 | }
475 |
476 | public ImageView getImage() {
477 | return getIcon(imageResource);
478 | }
479 |
480 | public String getDefaultTitle() {
481 | return getDefaultMasthead();
482 | }
483 |
484 | public abstract String getDefaultMasthead();
485 |
486 | public DialogOptions getDefaultOptions() {
487 | return defaultOptions;
488 | }
489 | }
490 |
491 | private static void centerToOwner(DialogTemplate template) {
492 | FXDialog dialog = template.getDialog();
493 | Window window = dialog.getOwner();
494 |
495 | if(!centerToOwner(window, dialog)){
496 | template.getDialog().centerOnScreen();
497 | }
498 | }
499 |
500 | private static boolean centerToOwner(Window window, FXDialog inDialog) {
501 | // get center of window
502 | final double windowCenterX = window.getX() + (window.getWidth() / 2);
503 | final double windowCenterY = window.getY() + (window.getHeight() / 2);
504 |
505 | final FXDialog dialog = inDialog;
506 |
507 | // verify
508 | if(!Double.isNaN(windowCenterX)){
509 | // set a temp position
510 | dialog.setX(windowCenterX);
511 | dialog.setY(windowCenterY);
512 |
513 | // Since the dialog doesn't have a width or height till it's shown, calculate its position after it's shown
514 | Platform.runLater(new Runnable() {
515 | @Override
516 | public void run() {
517 | double x = windowCenterX - (dialog.getWidth() / 2);
518 | double y = windowCenterY - (dialog.getHeight() / 2);
519 |
520 | // we don't want the top left of the dialog to shoot off the screen
521 | if(x < 0)
522 | x = 0;
523 | if(y < 0)
524 | y = 0;
525 |
526 | dialog.setX(x);
527 | dialog.setY(y);
528 | }
529 | });
530 |
531 | return true;
532 | }
533 | else {
534 | return false;
535 | }
536 | }
537 |
538 | private static DialogResponse showSimpleContentDialog(final Stage owner,
539 | final String title, final String masthead,
540 | final String message, DialogType dialogType,
541 | final DialogOptions options) {
542 | DialogTemplate template = new DialogTemplate(owner, title, masthead, options);
543 | template.setSimpleContent(message, dialogType);
544 | return showDialog(template);
545 | }
546 |
547 | private static DialogResponse showDialog(DialogTemplate template) {
548 | try {
549 | centerToOwner(template);
550 | template.show();
551 | return template.getResponse();
552 | } catch (Throwable e) {
553 | return CLOSED;
554 | }
555 | }
556 |
557 | private static T showUserInputDialog(DialogTemplate template) {
558 | // !CHANGE START! return null if user did not click ok
559 | centerToOwner(template);
560 | template.show();
561 | if (template.getResponse() == OK) {
562 | return template.getInputResponse();
563 | } else {
564 | return null;
565 | }
566 | // !CHANGE END!
567 | }
568 |
569 | private static DialogResponse showCustomDialog(DialogTemplate template) {
570 | try {
571 | //template.options = DialogType.CUSTOM.defaultOptions;
572 | centerToOwner(template);
573 | template.show();
574 | return template.getResponse();
575 | } catch (Throwable e) {
576 | return CLOSED;
577 | }
578 | // if (template.getResponse() == OK) {
579 | // return template.getInputResponse();
580 | // } else {
581 | // return null;
582 | // }
583 | }
584 |
585 | /**
586 | *
587 | * @param The type for user input
588 | */
589 | private static class DialogTemplate {
590 | private static enum DialogStyle {
591 | SIMPLE,
592 | ERROR,
593 | INPUT,
594 | CUSTOM;
595 | }
596 |
597 | // Defines max dialog width.
598 | final static int DIALOG_WIDTH = 516;
599 |
600 | // According to the UI spec, the width of the main message text in the upper
601 | // panel should be 426 pixels.
602 | private static int MAIN_TEXT_WIDTH = 400;
603 |
604 | private FXDialog dialog;
605 | private VBox contentPane;
606 |
607 | private DialogType dialogType = DialogType.INFORMATION;
608 | private final DialogOptions options;
609 | private DialogResponse userResponse = DialogResponse.CLOSED;
610 |
611 | private DialogStyle style;
612 |
613 | // for user input dialogs (textfield / choicebox / combobox)
614 | private T initialInputValue;
615 | private List inputChoices;
616 | // !CHANGE START! change to property so we can use binding
617 | private Property userInputResponse;
618 | // !CHANGE END!
619 |
620 |
621 | // masthead
622 | private String mastheadString;
623 | private BorderPane mastheadPanel;
624 | private ImageView mastheadIcon;
625 | private UITextArea mastheadTextArea;
626 |
627 | // center
628 | private Pane centerPanel;
629 | private String contentString = null;
630 |
631 | // Buttons
632 | private ObservableList