├── 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 | ![JavaFX Screenshots](https://raw.github.com/marcojakob/javafx-ui-sandbox/master/img/javafx-dialogs-screenshots.png) 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