FileChooser.java

Go to the documentation of this file.
00001 import javax.swing.*; 00002 import java.io.*; 00003 import java.awt.*; 00004 import java.util.*; 00005 import java.awt.event.*; 00006 00007 public class FileChooser extends JFileChooser { 00008 public static class ExtensionFilter 00009 extends javax.swing.filechooser.FileFilter { 00010 String extensions[]; 00011 String description; 00012 public ExtensionFilter(String name, String[] exts) { 00013 extensions = exts; 00014 00015 StringBuffer d = new StringBuffer(); 00016 if (name!=null) d.append(name).append(" ("); 00017 for (int i=0; i<extensions.length; i++) { 00018 if (i>0) d.append(", "); 00019 d.append("*.").append(extensions[i]); 00020 } 00021 if (name!=null) d.append(")"); 00022 description = d.toString(); 00023 } 00024 public String getDescription() { 00025 return description; 00026 } 00027 public boolean accept(File f) { 00028 if (f.isDirectory()) 00029 return true; 00030 String s = f.getName().toLowerCase(); 00031 for (int i=0; i<extensions.length; i++) 00032 if (s.endsWith("."+extensions[i])) return true; 00033 return false; 00034 } 00035 } 00036 00037 public static final int MODE_OPEN = 1; 00038 public static final int MODE_SAVE = 2; 00039 public static final int MODE_LOAD = 3; 00040 00041 public final Vector encodings = new Vector(); 00042 00043 private final void initEncodings() { 00044 if (encodings.size()>0) return; 00045 encodings.add("UTF8"); 00046 00047 encodings.add("ASCII"); 00048 encodings.add("Big5"); 00049 encodings.add("Big5_HKSCS"); 00050 encodings.add("Cp037"); 00051 encodings.add("Cp1006"); 00052 encodings.add("Cp1025"); 00053 encodings.add("Cp1026"); 00054 encodings.add("Cp1097"); 00055 encodings.add("Cp1098"); 00056 encodings.add("Cp1112"); 00057 encodings.add("Cp1122"); 00058 encodings.add("Cp1123"); 00059 encodings.add("Cp1124"); 00060 encodings.add("Cp1250"); 00061 encodings.add("Cp1251"); 00062 encodings.add("Cp1252"); 00063 encodings.add("Cp1253"); 00064 encodings.add("Cp1254"); 00065 encodings.add("Cp1255"); 00066 encodings.add("Cp1256"); 00067 encodings.add("Cp1257"); 00068 encodings.add("Cp1258"); 00069 encodings.add("Cp1381"); 00070 encodings.add("Cp1383"); 00071 encodings.add("Cp273"); 00072 encodings.add("Cp277"); 00073 encodings.add("Cp278"); 00074 encodings.add("Cp280"); 00075 encodings.add("Cp284"); 00076 encodings.add("Cp285"); 00077 encodings.add("Cp297"); 00078 encodings.add("Cp33722"); 00079 encodings.add("Cp420"); 00080 encodings.add("Cp424"); 00081 encodings.add("Cp437"); 00082 encodings.add("Cp500"); 00083 encodings.add("Cp737"); 00084 encodings.add("Cp775"); 00085 encodings.add("Cp838"); 00086 encodings.add("Cp850"); 00087 encodings.add("Cp852"); 00088 encodings.add("Cp855"); 00089 encodings.add("Cp856"); 00090 encodings.add("Cp857"); 00091 encodings.add("Cp860"); 00092 encodings.add("Cp861"); 00093 encodings.add("Cp862"); 00094 encodings.add("Cp863"); 00095 encodings.add("Cp864"); 00096 encodings.add("Cp865"); 00097 encodings.add("Cp866"); 00098 encodings.add("Cp868"); 00099 encodings.add("Cp869"); 00100 encodings.add("Cp870"); 00101 encodings.add("Cp871"); 00102 encodings.add("Cp874"); 00103 encodings.add("Cp875"); 00104 encodings.add("Cp918"); 00105 encodings.add("Cp921"); 00106 encodings.add("Cp922"); 00107 encodings.add("Cp930"); 00108 encodings.add("Cp933"); 00109 encodings.add("Cp935"); 00110 encodings.add("Cp937"); 00111 encodings.add("Cp939"); 00112 encodings.add("Cp942"); 00113 encodings.add("Cp942C"); 00114 encodings.add("Cp943"); 00115 encodings.add("Cp943C"); 00116 encodings.add("Cp948"); 00117 encodings.add("Cp949"); 00118 encodings.add("Cp949C"); 00119 encodings.add("Cp950"); 00120 encodings.add("Cp964"); 00121 encodings.add("Cp970"); 00122 encodings.add("EUC_CN"); 00123 encodings.add("EUC_JP"); 00124 encodings.add("EUC_JP_LINUX"); 00125 encodings.add("EUC_KR"); 00126 encodings.add("EUC_TW"); 00127 encodings.add("ISO2022JP"); 00128 encodings.add("ISO8859_1"); 00129 encodings.add("ISO8859_13"); 00130 encodings.add("ISO8859_15_FDIS"); 00131 encodings.add("ISO8859_2"); 00132 encodings.add("ISO8859_3"); 00133 encodings.add("ISO8859_4"); 00134 encodings.add("ISO8859_5"); 00135 encodings.add("ISO8859_6"); 00136 encodings.add("ISO8859_7"); 00137 encodings.add("ISO8859_8"); 00138 encodings.add("ISO8859_9"); 00139 encodings.add("JISAutoDetect"); 00140 encodings.add("Johab"); 00141 encodings.add("KOI8_R"); 00142 encodings.add("MS874"); 00143 encodings.add("MS932"); 00144 encodings.add("MS949"); 00145 encodings.add("SJIS"); 00146 encodings.add("TIS620"); 00147 encodings.add("Unicode"); 00148 encodings.add("UnicodeBigUnmarked"); 00149 encodings.add("UnicodeLittleUnmarked"); 00150 encodings.add("UTF16"); 00151 }; 00152 00153 InternationalInput internationalInput; 00154 JCheckBox optionInsert, optionAsInput, optionSaveSelection; 00155 JComboBox optionEncoding; 00156 Box optionEncodingBox; 00157 JPanel optionPanel; 00158 String lastEncoding = null; 00159 ExtensionFilter textFiles = new ExtensionFilter 00160 ("Text files",new String[] { "txt", "tex" }); 00161 ExtensionFilter configFiles = new ExtensionFilter 00162 ("Config files",new String[] { "inp", "my", "inp.gz", "my.gz" }); 00163 00164 public FileChooser(InternationalInput ii) { 00165 internationalInput = ii; 00166 optionPanel = new JPanel(); 00167 //optionPanel.setLayout(new GridLayout(0,1)); 00168 optionPanel.setLayout(new BoxLayout(optionPanel,BoxLayout.Y_AXIS)); 00169 optionPanel.setBorder(BorderFactory.createTitledBorder("Options")); 00170 setAccessory(optionPanel); 00171 optionInsert = new JCheckBox("Insert"); 00172 optionInsert.setToolTipText("Inserts the file at the current cursor position"); 00173 optionAsInput = new JCheckBox("As input"); 00174 optionAsInput.setToolTipText("Loads the file as if it had been typed in (uses the current input method)"); 00175 optionSaveSelection = new JCheckBox("Save selection"); 00176 optionSaveSelection.setToolTipText("Saves the current selection (instead of the whole file)"); 00177 00178 initEncodings(); 00179 optionEncoding = new JComboBox(encodings); 00180 optionEncoding.setToolTipText("Encoding of the file"); 00181 optionEncoding.setEditable(true); 00182 lastEncoding = (String)optionEncoding.getSelectedItem(); 00183 optionEncoding.addItemListener(new ItemListener() { 00184 public void itemStateChanged(ItemEvent ev) { 00185 if (ev.getStateChange() != ItemEvent.SELECTED) return; 00186 String enc = (String)ev.getItem(); 00187 try { 00188 new String(new byte[]{},enc); 00189 lastEncoding = enc; 00190 int size = encodings.size(); 00191 String lcenc = enc.toLowerCase(); 00192 boolean found = false; 00193 for (int i=0; i<size; i++) { 00194 String s = ((String)encodings.elementAt(i)). 00195 toLowerCase(); 00196 if (s.equals(lcenc)) { 00197 found = true; break; } 00198 } 00199 if (!found) encodings.insertElementAt(enc,0); 00200 } catch (UnsupportedEncodingException ex) { 00201 JOptionPane.showMessageDialog 00202 (FileChooser.this, 00203 "Encoding "+enc+" is not supported by Java", 00204 "Unsupported encoding", 00205 JOptionPane.ERROR_MESSAGE); 00206 optionEncoding.setSelectedItem(lastEncoding); 00207 int size = encodings.size(); 00208 enc = enc.toLowerCase(); 00209 for (int i=0; i<size; i++) { 00210 String s = ((String)encodings.elementAt(i)).toLowerCase(); 00211 if (s.equals(enc)) { 00212 encodings.removeElementAt(i); break; } 00213 } 00214 } 00215 }}); 00216 00217 //optionInsert.setHorizontalAlignment(SwingConstants.LEFT); 00218 //optionAsInput.setHorizontalAlignment(SwingConstants.LEFT); 00219 //optionSaveSelection.setHorizontalAlignment(SwingConstants.LEFT); 00220 //optionEncoding.setHorizontalAlignment(SwingConstants.LEFT); 00221 00222 Box box = new Box(BoxLayout.X_AXIS); 00223 box.add(optionInsert); box.add(Box.createHorizontalGlue()); 00224 optionPanel.add(box); 00225 00226 box = new Box(BoxLayout.X_AXIS); 00227 box.add(optionAsInput); box.add(Box.createHorizontalGlue()); 00228 optionPanel.add(box); 00229 00230 box = new Box(BoxLayout.X_AXIS); 00231 box.add(optionSaveSelection); box.add(Box.createHorizontalGlue()); 00232 optionPanel.add(box); 00233 00234 optionEncodingBox = new Box(BoxLayout.Y_AXIS); 00235 box = new Box(BoxLayout.X_AXIS); 00236 JLabel label = new JLabel("Encoding:"); 00237 label.addMouseListener(new MouseListener() { 00238 public void mouseReleased(MouseEvent e) {}; 00239 public void mouseEntered(MouseEvent e) {}; 00240 public void mouseExited(MouseEvent e) {}; 00241 public void mouseClicked(MouseEvent e) {}; 00242 public void mousePressed(MouseEvent e) { 00243 optionEncoding.requestFocus(); 00244 }}); 00245 box.add(label); box.add(Box.createHorizontalGlue()); 00246 optionEncodingBox.add(box); 00247 00248 box = new Box(BoxLayout.X_AXIS); 00249 box.add(optionEncoding); box.add(Box.createHorizontalGlue()); 00250 optionEncodingBox.add(box); 00251 00252 optionEncodingBox.add(Box.createVerticalGlue()); 00253 00254 optionPanel.add(optionEncodingBox); 00255 00256 optionPanel.add(Box.createVerticalGlue()); 00257 } 00258 00259 public int showOpenDialog(Component c) { 00260 throw new UnsupportedOperationException 00261 ("Use showDialog(int) instead"); } 00262 public int showSaveDialog(Component c) { 00263 throw new UnsupportedOperationException 00264 ("Use showDialog(int) instead"); } 00265 public int showDialog(Component c, String s) { 00266 throw new UnsupportedOperationException 00267 ("Use showDialog(int) instead"); } 00268 00269 public int showDialog(int mode) { 00270 String title = null; 00271 optionInsert.setVisible(false); 00272 optionAsInput.setVisible(false); 00273 optionSaveSelection.setVisible(false); 00274 optionEncodingBox.setVisible(false); 00275 //optionPanel.removeAll(); 00276 optionPanel.setVisible(true); 00277 resetChoosableFileFilters(); 00278 setAcceptAllFileFilterUsed(true); 00279 00280 switch (mode) { 00281 case MODE_OPEN: 00282 title = "Open"; 00283 optionInsert.setVisible(true); 00284 optionAsInput.setVisible(true); 00285 optionEncodingBox.setVisible(true); 00286 //optionPanel.add(optionInsert); 00287 //optionPanel.add(optionAsInput); 00288 //optionPanel.add(optionEncoding); 00289 break; 00290 case MODE_SAVE: 00291 title = "Save"; 00292 optionSaveSelection.setVisible(true); 00293 //optionPanel.add(optionSaveSelection); 00294 if (internationalInput.hasSelection()) { 00295 optionSaveSelection.setEnabled(true); 00296 } else { 00297 optionSaveSelection.setEnabled(false); 00298 optionSaveSelection.setSelected(false); 00299 } 00300 optionEncodingBox.setVisible(true); 00301 //optionPanel.add(optionEncoding); 00302 break; 00303 case MODE_LOAD: 00304 title = "Load"; 00305 optionPanel.setVisible(false); 00306 setAcceptAllFileFilterUsed(false); 00307 break; 00308 default: 00309 throw new IllegalArgumentException("Unknown mode "+mode); 00310 } 00311 00312 if (mode==MODE_LOAD) 00313 addChoosableFileFilter(configFiles); 00314 else 00315 addChoosableFileFilter(textFiles); 00316 00317 //optionPanel.add(test); 00318 //optionPanel.doLayout(); 00319 return super.showDialog(internationalInput,title); 00320 } 00321 00322 public boolean getOptionInsert() { 00323 return optionInsert.isSelected(); 00324 } 00325 public boolean getOptionAsInput() { 00326 return optionAsInput.isSelected(); 00327 } 00328 public boolean getOptionSaveSelection() { 00329 return optionSaveSelection.isSelected(); 00330 } 00331 public String getEncoding() { 00332 return (String)optionEncoding.getSelectedItem(); 00333 } 00334 }

Generated on Sun Aug 15 11:56:53 2004 for International Input by doxygen 1.3.7