Skip to content

Commit 8ff8181

Browse files
authored
Merge pull request #128 from BobHanson/hanson1
test.async improvements; multifile DnD and file reading
2 parents 2378e72 + fa535e1 commit 8ff8181

File tree

16 files changed

+527
-93
lines changed

16 files changed

+527
-93
lines changed
1.8 KB
Binary file not shown.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
20191105122130
1+
20191107021431
1.8 KB
Binary file not shown.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
20191105122130
1+
20191107021431
1.8 KB
Binary file not shown.

sources/net.sf.j2s.java.core/doc/Differences.txt

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,17 @@ be done in UTF-8. This means:
1010
- making sure your server can serve up UTF-8 by default for any browser-loaded files
1111
- making sure you don't edit a Java2Script class file or one of the site .js files
1212
using a non-UTF-8 editor. It may replace non-Latin characters with "?" or garbage.
13+
- making sure that your web pages are delivered with
14+
15+
<!DOCTYPE html>
16+
<html>
17+
<head>
18+
<meta charset="utf-8">
19+
20+
Note that the DOCTYPE tag is critical for some browsers to switch into HTML5 mode. (MSIE?)
21+
22+
23+
1324

1425
In particular, the Mandarin character 秘 (mi; "secret") is used extensively throughout
1526
the SwingJS class files to distinguish j2s-specific fields and methods that must not
@@ -499,6 +510,48 @@ It's a simple modification:
499510
}
500511

501512

513+
@Override
514+
public void propertyChange(PropertyChangeEvent event) {
515+
Object val = event.getNewValue();
516+
String name = event.getPropertyName();
517+
System.out.println(name);
518+
switch (event.getSource().getClass().getName()) {
519+
case "javax.swing.JOptionPane":
520+
switch (name) {
521+
case "inputValue":
522+
onDialogReturn(val);
523+
return;
524+
case "value":
525+
if (val instanceof Integer)
526+
onDialogReturn(((Integer) val).intValue());
527+
else
528+
onDialogReturn(val);
529+
return;
530+
}
531+
break;
532+
case "javax.swing.ColorChooserDialog":
533+
switch (name) {
534+
case "SelectedColor":
535+
onDialogReturn(val);
536+
return;
537+
}
538+
break;
539+
case "javax.swing.JFileChooser":
540+
switch (name) {
541+
case "SelectedFile":
542+
File file = (File) val;
543+
byte[] array = (val == null ? null : /** @j2sNative file.秘bytes || */
544+
null);
545+
onDialogReturn("fileName is '" + file.getName() + "'\n\n" + new String(array));
546+
return;
547+
}
548+
break;
549+
}
550+
System.out.println(
551+
event.getSource().getClass().getName() + " " + event.getPropertyName() + ": " + event.getNewValue());
552+
}
553+
554+
502555
Developers are encouraged to create a separate class that handles general calls to JFileDialog.
503556
An example class can be found in the SwingJS distribution as
504557

sources/net.sf.j2s.java.core/src/javax/swing/JFileChooser.java

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -780,7 +780,31 @@ public int showDialog(Component parent, String approveButtonText) {
780780
removePropertyChangeListener((PropertyChangeListener) parent);
781781
addPropertyChangeListener((PropertyChangeListener) parent);
782782
}
783-
@SuppressWarnings("unused") Runnable r = new Runnable() {
783+
String format = (isMultiSelectionEnabled() ? "java.util.Array" : "java.io.File");
784+
@SuppressWarnings("unused") Runnable r =
785+
786+
(isMultiSelectionEnabled() ?
787+
788+
new Runnable() {
789+
790+
@Override
791+
public void run() {
792+
/**
793+
* @j2sNative
794+
*
795+
* this.b$['javax.swing.JFileChooser'].selectedFiles = arguments[0] || null;
796+
* this.b$['javax.swing.JFileChooser'].selectedFile = arguments[0][0] || null;
797+
*
798+
*
799+
*/
800+
firePropertyChange("SelectedFiles", null, selectedFiles);
801+
}
802+
803+
}
804+
805+
:
806+
807+
new Runnable() {
784808

785809
@Override
786810
public void run() {
@@ -794,8 +818,12 @@ public void run() {
794818
firePropertyChange("SelectedFile", null, selectedFile);
795819
}
796820

797-
};
798-
JSUtil.J2S.getFileFromDialog(/**@j2sNative function(file){r.run$(file)}||*/ null, "java.io.File");
821+
}
822+
823+
);
824+
JSUtil.J2S.getFileFromDialog(/**@j2sNative function(file){r.run$(file)}||*/ null,
825+
format);
826+
799827
return JDialog.ASYNCHRONOUS_INTEGER;
800828
case SAVE_DIALOG:
801829
if (selectedFile != null)

sources/net.sf.j2s.java.core/src/swingjs/JSDnD.java

Lines changed: 58 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public static void drop(JComponent jc, Object html5DataTransfer, String name, by
5353
if (target != null) {
5454
offset = jc.getLocationOnScreen();
5555
// if (name == null)
56-
target.drop(JSDnD.createDropEvent(target, t, name, data, x, y));
56+
target.drop(createDropEvent(target, t, name, data, x, y));
5757
return;
5858
}
5959
Component top = jc.getTopLevelAncestor();
@@ -67,7 +67,32 @@ public static void drop(JComponent jc, Object html5DataTransfer, String name, by
6767
//- offset.y
6868
, t, name, data));
6969
}
70+
71+
public static void drop(JComponent jc, Object html5DataTransfer, Object[][] data, int x, int y) {
72+
if (html5DataTransfer == null)
73+
return;
74+
JSTransferable t = new JSTransferable(html5DataTransfer);
75+
DropTarget target = jc.getDropTarget();
76+
System.out.println("JSDnD[] drop for " + jc.getUIClassID() + " target " + target);
77+
Point offset;
78+
if (target != null) {
79+
offset = jc.getLocationOnScreen();
80+
// if (name == null)
81+
target.drop(createDropEvent(target, t, data, x, y));
82+
return;
83+
}
84+
Component top = jc.getTopLevelAncestor();
85+
offset = top.getLocationOnScreen();
86+
87+
System.out.println("JSDnD drop for " + jc.getUIClassID() + " offset " + x + " " + y + " -"+ offset);
7088

89+
top.dispatchEvent(new JSDropMouseEvent(jc, MouseEvent.MOUSE_RELEASED, x
90+
//- offset.x
91+
, y
92+
//- offset.y
93+
, t, null, null));
94+
}
95+
7196
@SuppressWarnings("serial")
7297
public static class JSDropMouseEvent extends MouseEvent implements ActiveEvent {
7398

@@ -111,9 +136,9 @@ public void dispatch() {
111136
try {
112137
DropTarget target = ((Component) getSource()).getDropTarget();
113138
if (name == null)
114-
target.drop(JSDnD.createDropEvent(target, transferable, null, null, getX(), getY()));
139+
target.drop(createDropEvent(target, transferable, null, null, getX(), getY()));
115140
else
116-
target.drop(JSDnD.createDropEvent(target, transferable, name, getBData(), getX(), getY()));
141+
target.drop(createDropEvent(target, transferable, name, getBData(), getX(), getY()));
117142
} catch (Throwable e) {
118143
System.out.println("JSDnD Error creating Drop event " + e);
119144
}
@@ -139,6 +164,12 @@ public String paramString() {
139164

140165
}
141166

167+
static DropTargetDropEvent createDropEvent(DropTarget target, Transferable t, Object[][] data, int x, int y) {
168+
DropTargetContext context = new DropTargetContext(target);
169+
context.addNotify(new JSDropTargetContextPeer(target, t, data));
170+
return new DropTargetDropEvent(context, new Point(x, y), DnDConstants.ACTION_MOVE, DnDConstants.ACTION_LINK | DnDConstants.ACTION_COPY_OR_MOVE);
171+
}
172+
142173
static DropTargetDropEvent createDropEvent(DropTarget target, Transferable t, String name, byte[] data, int x, int y) {
143174
DropTargetContext context = new DropTargetContext(target);
144175
context.addNotify(new JSDropTargetContextPeer(target, t, name, data));
@@ -152,6 +183,11 @@ public JSDropTargetContextPeer (DropTarget target, Transferable t, String name,
152183
transferable = (name == null ? t : new FileTransferable(name, data));
153184
}
154185

186+
public JSDropTargetContextPeer(DropTarget target, Transferable t, Object[][] data) {
187+
this.target = target;
188+
transferable = new FileTransferable(data);
189+
}
190+
155191
private Transferable transferable;
156192
private DropTarget target;
157193

@@ -274,12 +310,26 @@ private static String fixType(String s) {
274310

275311
static public class FileTransferable extends JSTransferable {
276312

277-
private File file;
313+
private List<File> files;
278314

279315
public FileTransferable(String name, byte[] data) {
280316
super(null);
281-
file = new File(name);
317+
files = new ArrayList<File>();
318+
addFile(name, data);
319+
}
320+
321+
private void addFile(String name, byte[] data) {
322+
File file = new File(name);
282323
file.秘bytes = data;
324+
files.add(file);
325+
}
326+
327+
public FileTransferable(Object[][] data) {
328+
super(null);
329+
files = new ArrayList<File>();
330+
for (int i = 0; i < data.length; i++) {
331+
addFile((String) data[i][0],(byte[]) data[i][1]);
332+
}
283333
}
284334

285335
@Override
@@ -296,9 +346,9 @@ public boolean isDataFlavorSupported(DataFlavor flavor) {
296346

297347
@Override
298348
public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
299-
List<File> list = new ArrayList<File>();
300-
list.add(file);
301-
return list;
349+
Object o = files;
350+
files = null;
351+
return o;
302352
}
303353

304354
}

sources/net.sf.j2s.java.core/src/test/Test_Applet_DropFile.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,8 @@ public void drop(DropTargetDropEvent dtde) {
8585

8686
try {
8787
Transferable tr = dtde.getTransferable();
88+
JTextArea target = (JTextArea) ((DropTarget) dtde.getSource()).getComponent();
89+
target.setText("");
8890
DataFlavor[] flavors = tr.getTransferDataFlavors();
8991
for (int i = 0; i < flavors.length; i++) {
9092
if (flavors[i].isFlavorJavaFileListType()) {
@@ -93,17 +95,17 @@ public void drop(DropTargetDropEvent dtde) {
9395
for (int j = 0; j < list.size(); j++) {
9496
File file = (File) list.get(j);
9597
byte[] data = getDroppedFileBytes(file);
96-
fileName.setText(file.getName() + " - " + data.length + " " + dtde.getLocation());
97-
JTextArea target = (JTextArea) ((DropTarget) dtde.getSource()).getComponent();
98-
target.setText(new String(data));
98+
String s = ">>>>>>>>>"+ file.getName() + " - " + data.length + " " + dtde.getLocation() + "\n";
99+
fileName.setText(s);
100+
target.append(s);
101+
target.append(new String(data));
99102
System.out.println("prefsize " + target.getPreferredSize());
100103
}
101104
dtde.dropComplete(true);
102105
return;
103106
} else if (flavors[i].isFlavorTextType()) {
104107
dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
105108
String data = (String) tr.getTransferData(flavors[i]);
106-
JTextArea target = (JTextArea) ((DropTarget) dtde.getSource()).getComponent();
107109
target.setText(data);
108110
dtde.dropComplete(true);
109111
}

sources/net.sf.j2s.java.core/src/test/Test_Dialog.java

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,19 @@ public void propertyChange(PropertyChangeEvent event) {
6464
break;
6565
case "javax.swing.JFileChooser":
6666
switch (name) {
67+
case "SelectedFiles":
68+
File[] files = (File[]) val;
69+
long[] len = new long[files.length];
70+
for (int i = 0; i < files.length; i++) {
71+
len[i] = files[i].length();
72+
}
73+
onDialogReturn(files.length + " files read sizes=" + len);
74+
return;
6775
case "SelectedFile":
6876
File file = (File) val;
6977
byte[] array = (val == null ? null : /** @j2sNative file.秘bytes || */
7078
null);
71-
onDialogReturn("fileName is '" + file.getName() + "'\n\n" + new String(array));
79+
onDialogReturn("fileName is '" + file.getName() + " size=" + array.length);
7280
return;
7381
}
7482
break;
@@ -170,6 +178,19 @@ public void actionPerformed(ActionEvent e) {
170178
});
171179
p.add(b);
172180

181+
b = new JButton("FilesOpenDialog");
182+
b.addActionListener(new ActionListener() {
183+
184+
@Override
185+
public void actionPerformed(ActionEvent e) {
186+
JFileChooser fc = new JFileChooser();
187+
fc.setMultiSelectionEnabled(true);
188+
onDialogReturn(fc.showOpenDialog(Test_Dialog.this));
189+
}
190+
191+
});
192+
p.add(b);
193+
173194
b = colorButton = new JButton("ColorDialog");
174195
b.addActionListener(new ActionListener() {
175196

0 commit comments

Comments
 (0)