我有一些问题使我的swing应用程序在Mac OSX中运行。这个swing应用程序应该在浏览器内的applet上运行。
请注意,此问题仅适用于mac osx,且仅当applet在浏览器上运行时
我看到的问题是drop事件未正确传递到Applet内的组件。 以下示例包含标签和输入字段。如果从标签拖动到输入字段,标签文本应复制到输入字段中。
package com.example;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.*;
public class DND extends JApplet {
/**
*
*/
private static final long serialVersionUID = 1L;
JTextField txtField;
JLabel lbl;
private void doStart() {
this.setLayout(new FlowLayout(FlowLayout.CENTER));
txtField = new JTextField(20);
lbl = new JLabel("Drag this text to the input field");
lbl.setPreferredSize(new Dimension(250, 100));
lbl.setBackground(Color.lightGray);
lbl.setBorder(BorderFactory.createLineBorder(Color.black));
lbl.setTransferHandler(new TransferHandler("text"));
MouseListener ml = new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
JComponent jc = (JComponent) e.getSource();
TransferHandler th = jc.getTransferHandler();
th.exportAsDrag(jc, e, TransferHandler.COPY);
}
};
lbl.addMouseListener(ml);
add(txtField);
add(lbl);
setBackground(Color.lightGray);
setVisible(true);
}
@Override
public void start() {
try {
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
doStart();
}
});
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
使用此代码,您必须生成一个.jar文件,该文件将在以下html中使用,以便您可以在浏览器中运行applet:
<html>
<head>
<title>Menu test Applet</title>
</head>
<body>
<applet id="AppletID" height="800" width="600"
code="com.example.DND"
archive="*jar_file*.jar">
</applet>
</div>
</body>
</html>
如果使用cmd + shift将applet弹出浏览器,一切都会按预期工作。
系统规格: Firefox 16.0.2 Mac OS X 10.7.5 JRE版本1.6.0_37-b06(插件1.6.0_37,但这个问题也发生在1.6.0_31)
任何人都知道我做错了什么?