1 /* 2 * Copyright (c) 2014, 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.test.chooser; 26 27 import java.io.File; 28 import java.util.List; 29 import javafx.application.Application; 30 import javafx.event.Event; 31 import javafx.event.EventHandler; 32 import javafx.scene.Scene; 33 import javafx.scene.control.Button; 34 import javafx.scene.control.Label; 35 import javafx.scene.control.TextField; 36 import javafx.scene.control.TextFieldBuilder; 37 import javafx.scene.control.Tooltip; 38 import javafx.scene.layout.GridPane; 39 import javafx.scene.text.Text; 40 import javafx.stage.DirectoryChooser; 41 import javafx.stage.FileChooser; 42 import javafx.stage.FileChooser.ExtensionFilter; 43 import javafx.stage.Stage; 44 import test.javaclient.shared.Utils; 45 46 /** 47 * @author Andrey Glushchenko, Alexander Kirov 48 */ 49 public class FXChooser extends Application { 50 51 int width = 600; 52 int height = 400; 53 ExtensionFilter extensionFilter; 54 TextField initialFileNameTextField; 55 TextField titleTextField; 56 Label errorText; 57 58 @Override 59 public void start(final Stage stage) throws Exception { 60 try { 61 extensionFilter = new FileChooser.ExtensionFilter("File with extension (*.extension)", "*.extension"); 62 initialFileNameTextField = TextFieldBuilder.create().text("").promptText("Initial file name").build(); 63 titleTextField = TextFieldBuilder.create().text("").promptText("Title").build(); 64 errorText = new Label("No errors"); 65 66 // OPEN FOLDER 67 final DirectoryChooser directoryChooser = new DirectoryChooser(); 68 69 final Text fxDirOpenResText = new Text("no dir choosen"); 70 Button fxOpenDirButton = new Button("Open Dir FX"); 71 fxOpenDirButton.setPrefSize(width / 2, height / 2); 72 fxOpenDirButton.setOnAction(new EventHandler() { 73 public void handle(Event t) { 74 try { 75 initTitle(directoryChooser); 76 final File folder = directoryChooser.showDialog(null); 77 fxDirOpenResText.setText("FX Dir chooser result is : " + (folder != null ? folder.getAbsolutePath() : "null")); 78 } catch (Throwable ex) { 79 indicateError(ex); 80 } 81 } 82 }); 83 84 // SAVE FILE 85 final FileChooser saveFileChooser = new FileChooser(); 86 87 final Text fxFileSaveResText = new Text("no files choosen"); 88 Button fxSaveFileButton = new Button("Save file FX (modal dialog)"); 89 fxSaveFileButton.setPrefSize(width / 2, height / 2); 90 fxSaveFileButton.setOnAction(new EventHandler() { 91 public void handle(Event t) { 92 try { 93 initFileAndTitle(saveFileChooser); 94 File file = saveFileChooser.showSaveDialog(stage); 95 fxFileSaveResText.setText("FX File save chooser result is : " + (file != null ? file.getAbsolutePath() : "null")); 96 if (file != null) { 97 file.createNewFile(); 98 } 99 } catch (Exception ex) { 100 indicateError(ex); 101 } 102 } 103 }); 104 105 // SAVE FILE WITH EXTENSION 106 final FileChooser saveFileWithExtChooser = new FileChooser(); 107 saveFileWithExtChooser.getExtensionFilters().addAll(extensionFilter); 108 109 final Text fxFileSaveWithExtResText = new Text("no files choosen"); 110 Button fxSaveFileWithExtButton = new Button("Save file with extension FX (modal dialog)"); 111 fxSaveFileWithExtButton.setPrefSize(width / 2, height / 2); 112 fxSaveFileWithExtButton.setOnAction(new EventHandler() { 113 public void handle(Event t) { 114 try { 115 initFileAndTitle(saveFileWithExtChooser); 116 File file = saveFileWithExtChooser.showSaveDialog(stage); 117 fxFileSaveWithExtResText.setText("FX File save chooser result is : " + (file != null ? file.getAbsolutePath() : "null")); 118 if (file != null) { 119 file.createNewFile(); 120 } 121 } catch (Exception ex) { 122 indicateError(ex); 123 } 124 } 125 }); 126 127 // OPEN FILE 128 final FileChooser fileOpenChooser = new FileChooser(); 129 130 final Text fxFileOpenResText = new Text("no file choosen"); 131 Button fxOpenFileButton = new Button("Open File FX"); 132 fxOpenFileButton.setPrefSize(width / 2, height / 2); 133 fxOpenFileButton.setOnAction(new EventHandler() { 134 public void handle(Event t) { 135 try { 136 initFileAndTitle(fileOpenChooser); 137 final File file = fileOpenChooser.showOpenDialog(null); 138 fxFileOpenResText.setText("FX File chooser result is : " + (file != null ? file.getAbsolutePath() : "null")); 139 } catch (Throwable ex) { 140 indicateError(ex); 141 } 142 } 143 }); 144 145 // OPEN FILE WITH EXTENSION 146 final FileChooser fileOpenWithExtChooser = new FileChooser(); 147 fileOpenWithExtChooser.getExtensionFilters().addAll(extensionFilter); 148 149 final Text fxFileOpenWithExtResText = new Text("no file choosen"); 150 Button fxOpenFileWithExtButton = new Button("Open File with extension FX"); 151 fxOpenFileWithExtButton.setPrefSize(width / 2, height / 2); 152 fxOpenFileWithExtButton.setOnAction(new EventHandler() { 153 public void handle(Event t) { 154 try { 155 initFileAndTitle(fileOpenWithExtChooser); 156 final File file = fileOpenWithExtChooser.showOpenDialog(null); 157 fxFileOpenWithExtResText.setText("FX File chooser result is : " + (file != null ? file.getAbsolutePath() : "null")); 158 } catch (Throwable ex) { 159 indicateError(ex); 160 } 161 } 162 }); 163 164 // OPEN MULTIPLE FILES 165 final FileChooser fileOpenMultiChooser = new FileChooser(); 166 167 final Label fxFileOpenMultiResText = new Label("no file choosen"); 168 fxFileOpenMultiResText.setWrapText(true); 169 Button fxOpenMultiFileButton = new Button("Open Multiple Files FX"); 170 fxOpenMultiFileButton.setPrefSize(width / 2, height / 2); 171 fxOpenMultiFileButton.setOnAction(new EventHandler() { 172 public void handle(Event t) { 173 try { 174 initFileAndTitle(fileOpenMultiChooser); 175 final List<File> files = fileOpenMultiChooser.showOpenMultipleDialog(null); 176 StringBuilder builder = new StringBuilder("FX File chooser result : "); 177 if (files != null) { 178 for (File file : files) { 179 builder.append(file != null ? file.getAbsolutePath() : "null").append("; "); 180 } 181 } else { 182 builder.append("null"); 183 } 184 fxFileOpenMultiResText.setText(builder.toString()); 185 } catch (Throwable ex) { 186 indicateError(ex); 187 } 188 } 189 }); 190 191 // OPEN MULTIPLE FILES WITH EXTENSIONS 192 final FileChooser fileOpenMultiWithExtChooser = new FileChooser(); 193 fileOpenMultiWithExtChooser.getExtensionFilters().addAll(extensionFilter); 194 195 final Label fxFileOpenMultiWithExtResText = new Label("no file choosen"); 196 fxFileOpenMultiWithExtResText.setWrapText(true); 197 Button fxOpenMultiWithExtFileButton = new Button("Open Multiple Files With extensions FX"); 198 fxOpenMultiWithExtFileButton.setPrefSize(width / 2, height / 2); 199 fxOpenMultiWithExtFileButton.setOnAction(new EventHandler() { 200 public void handle(Event t) { 201 try { 202 initFileAndTitle(fileOpenMultiWithExtChooser); 203 final List<File> files = fileOpenMultiWithExtChooser.showOpenMultipleDialog(null); 204 StringBuilder builder = new StringBuilder("FX File chooser result : "); 205 if (files != null) { 206 for (File file : files) { 207 builder.append(file != null ? file.getAbsolutePath() : "null").append("; "); 208 } 209 } else { 210 builder.append("null"); 211 } 212 fxFileOpenMultiWithExtResText.setText(builder.toString()); 213 } catch (Throwable ex) { 214 indicateError(ex); 215 } 216 } 217 }); 218 219 GridPane root = new GridPane(); 220 221 root.add(new Label("Initial file name : "), 0, 0); 222 root.add(initialFileNameTextField, 1, 0); 223 224 root.add(new Label("Title : "), 0, 1); 225 root.add(titleTextField, 1, 1); 226 227 root.add(fxOpenDirButton, 0, 2); 228 root.add(fxSaveFileButton, 0, 3); 229 root.add(fxSaveFileWithExtButton, 0, 4); 230 root.add(fxOpenFileButton, 0, 5); 231 root.add(fxOpenFileWithExtButton, 0, 6); 232 root.add(fxOpenMultiFileButton, 0, 7); 233 root.add(fxOpenMultiWithExtFileButton, 0, 8); 234 235 root.add(fxDirOpenResText, 1, 2); 236 root.add(fxFileSaveResText, 1, 3); 237 root.add(fxFileSaveWithExtResText, 1, 4); 238 root.add(fxFileOpenResText, 1, 5); 239 root.add(fxFileOpenWithExtResText, 1, 6); 240 root.add(fxFileOpenMultiResText, 1, 7); 241 root.add(fxFileOpenMultiWithExtResText, 1, 8); 242 243 root.add(errorText, 0, 9); 244 245 Scene scene = new Scene(root, width, height); 246 stage.setScene(scene); 247 stage.setTitle("FXChooser"); 248 stage.show(); 249 } catch (Throwable ex) { 250 indicateError(ex); 251 } 252 } 253 254 private void indicateError(Throwable ex) { 255 errorText.setText("Error has happened. See log."); 256 ex.printStackTrace(System.err); 257 errorText.setTooltip(new Tooltip(ex.getMessage() + "\n")); 258 for (StackTraceElement element : ex.getStackTrace()) { 259 errorText.getTooltip().setText(errorText.getTooltip().getText() + element.toString() + "\n"); 260 } 261 } 262 263 private void initFileAndTitle(FileChooser fc) { 264 if (!titleTextField.getText().equals("")) { 265 fc.setTitle(titleTextField.getText()); 266 } 267 if (!initialFileNameTextField.getText().equals("")) { 268 fc.setInitialFileName(initialFileNameTextField.getText()); 269 } 270 } 271 272 private void initTitle(DirectoryChooser dc) { 273 if (!titleTextField.getText().equals("")) { 274 dc.setTitle(titleTextField.getText()); 275 } 276 } 277 278 public static void main(String[] args) { 279 Utils.launch(FXChooser.class, args); 280 } 281 }