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