001 package org.gui; 002 003 import java.io.*; 004 import java.net.*; 005 import java.awt.*; 006 import javax.swing.*; 007 import java.awt.dnd.*; 008 import java.awt.datatransfer.*; 009 010 public class GUITool { 011 012 private static java.util.ArrayList<JFrame> frame_list_ = new java.util.ArrayList<JFrame>(); 013 private static JFileChooser file_chooser_; 014 015 public static boolean tryToSetSystemLookAndFeel() throws Exception { 016 boolean result = true; 017 try{ 018 String system_laf_name = UIManager.getSystemLookAndFeelClassName(); 019 UIManager.setLookAndFeel(system_laf_name); 020 }catch(Exception e){ result = false; } 021 return result; 022 } 023 024 public static File[] openFiles(JComponent parent, String button_name) throws Exception { 025 JFileChooser file_chooser = getFileChooser(); 026 if(button_name==null) 027 button_name = "open"; 028 int result = file_chooser.showDialog(parent, button_name); 029 if(result != JFileChooser.APPROVE_OPTION) throw new UsarCancelException("usarcanceld"); 030 File[] file_list = file_chooser.getSelectedFiles(); 031 return file_list; 032 } 033 034 public static File openFile(JComponent parent, String button_name) throws Exception { 035 JFileChooser file_chooser = getFileChooser(); 036 if(button_name==null) 037 button_name = "open"; 038 int result = file_chooser.showDialog(parent, button_name); 039 if(result != JFileChooser.APPROVE_OPTION) throw new UsarCancelException("usar canceld"); 040 File file = file_chooser.getSelectedFile(); 041 return file; 042 } 043 044 public static JFileChooser getFileChooser() throws Exception { 045 if(file_chooser_ == null) { 046 file_chooser_ = new JFileChooser(); 047 JPanel panel = new JPanel(new BorderLayout()); 048 JTextPane ta = new JTextPane(); 049 ta.setContentType("text/html"); 050 ta.setText("<html><br/><div style='text-align:center;'>Drop Area</div></html>"); 051 ta.setPreferredSize(new Dimension(100, 100)); 052 ta.setEditable(false); 053 ta.setBorder(BorderFactory.createLineBorder(Color.black)); 054 // ta.setLineWrap(true); 055 panel.add(ta, BorderLayout.CENTER); 056 panel.setBorder(BorderFactory.createEmptyBorder(0,20,0,0)); 057 // JComponent component = panel; 058 FileInputer inputer = new FileInputer(){ 059 public void openFile(File... file) { 060 file_chooser_.setSelectedFiles(file); 061 } 062 }; 063 setFileInputer(ta, ta, inputer); 064 file_chooser_.setAccessory(panel); 065 file_chooser_.setMultiSelectionEnabled(true); 066 } 067 return file_chooser_; 068 } 069 070 public static JFrame showFrame(JComponent component) { 071 return showFrame(component, JFrame.DO_NOTHING_ON_CLOSE); 072 } 073 074 public static JFrame showFrame(JComponent component, int close_operation) { 075 JFrame frame = new JFrame(); 076 frame.setContentPane(component); 077 frame.setDefaultCloseOperation(close_operation); 078 frame.pack(); 079 frame.setLocationRelativeTo(null); 080 frame.setVisible(true); 081 frame_list_.add(frame); 082 return frame; 083 } 084 085 public static void alert(Object message) { 086 JOptionPane.showMessageDialog(null, message); 087 } 088 089 090 091 092 093 094 095 096 097 098 099 100 public static void setFileInputer(JComponent component,final JTextPane message_label, final FileInputer inputer) throws Exception { 101 DropTarget dt = new DropTarget(); 102 dt.addDropTargetListener(new DropTargetAdapter(){ 103 public void dragEnter(DropTargetDragEvent dtde) { 104 try{ 105 Transferable transferable_data = dtde.getTransferable(); 106 if(transferable_data.isDataFlavorSupported(DataFlavor.stringFlavor)) { 107 String text = (String)transferable_data.getTransferData(DataFlavor.stringFlavor); 108 if(message_label != null) { 109 //message_label.setText(text); 110 message_label.setText("<html><br/><div style='text-align:center;'>"+text+"</div></html>"); 111 } 112 dtde.acceptDrag(DnDConstants.ACTION_COPY); 113 } else if(transferable_data.isDataFlavorSupported(DataFlavor.javaFileListFlavor)){ 114 Object tmp = transferable_data.getTransferData(DataFlavor.javaFileListFlavor); 115 java.util.List<File> file_list = castList(tmp); 116 StringBuffer text = new StringBuffer(); 117 for(int i=0;i<file_list.size();i++) 118 text.append(file_list.get(i).getAbsolutePath()+"\n"); 119 if(message_label != null) { 120 //message_label.setText(text.toString()); 121 message_label.setText("<html><br/><div style='text-align:center;'>"+text+"</div></html>"); 122 } 123 dtde.acceptDrag(DnDConstants.ACTION_COPY); 124 } else { 125 if(message_label != null) { 126 String text = "unknown data type."; 127 //message_label.setText(text); 128 message_label.setText("<html><br/><div style='text-align:center;'>"+text+"</div></html>"); 129 } 130 dtde.rejectDrag(); 131 } 132 }catch(Exception e){ 133 e.printStackTrace(); 134 } 135 } 136 public void dragExit(DropTargetEvent dtde) { 137 if(message_label != null) 138 message_label.setText("drop area"); 139 } 140 public void drop(DropTargetDropEvent dtde){ 141 boolean success = false; 142 dtde.acceptDrop(DnDConstants.ACTION_COPY); 143 try{ 144 Transferable transferable_data = dtde.getTransferable(); 145 if(transferable_data.isDataFlavorSupported(DataFlavor.stringFlavor)) { 146 String text = (String)transferable_data.getTransferData(DataFlavor.stringFlavor); 147 text = text.replaceAll("\r\n", "\n").replaceAll("\r","\n"); 148 String[] uri_text_list = text.split("\n"); 149 final File[] file_list = new File[uri_text_list.length]; 150 for(int i=0;i<uri_text_list.length;i++) 151 file_list[i] = new File(new URI(uri_text_list[i])); 152 inputer.openFile(file_list); 153 success = true; 154 } else if(transferable_data.isDataFlavorSupported(DataFlavor.javaFileListFlavor)){ 155 Object tmp = transferable_data.getTransferData(DataFlavor.javaFileListFlavor); 156 java.util.List<File> file_list = castList(tmp); 157 inputer.openFile(file_list.toArray(new File[0])); 158 success = true; 159 } else { 160 StringBuffer sb = new StringBuffer(); 161 DataFlavor[] dfs = transferable_data.getTransferDataFlavors(); 162 for(int i=0;i<dfs.length;i++) { 163 sb.append(dfs[i].getMimeType()); 164 sb.append("("); 165 sb.append(dfs[i].toString()); 166 sb.append(")\n"); 167 } 168 throw new Exception("Unsupported data type.\n"+sb.toString()); 169 } 170 }catch(Exception e){ 171 e.printStackTrace(); 172 } 173 if(message_label != null) 174 message_label.setText("<html><br/><div style='text-align:center;'>Drop Area</div></html>"); 175 //message_label.setText("drop area"); 176 dtde.dropComplete(success); 177 } 178 }); 179 component.setDropTarget(dt); 180 } 181 182 183 184 185 public static void setFileInputer(JComponent component, final FileInputer inputer) throws Exception { 186 setFileInputer(component, null, inputer); 187 } 188 189 190 191 192 @SuppressWarnings("unchecked") 193 private static <E> java.util.List<E> castList(Object list) { 194 return (java.util.List<E>)list; 195 } 196 }