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 }