我在使我的 Swing 应用程序在 Mac OSX 中工作时遇到了一些问题。这个 Swing 应用程序应该在浏览器内的小程序上运行。
请注意,这个问题是 mac osx 独有的,只有当小程序在浏览器上运行时才会出现
我看到的问题是 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 中使用,以便您可以在浏览器中运行小程序:
<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 从浏览器中弹出小程序,一切都会按预期工作。
系统规格:Firefox 16.0.2 Mac OS X 10.7.5 JRE 版本 1.6.0_37-b06(带有插件 1.6.0_37 但这个问题也发生在 1.6.0_31 中)
有人知道我在做什么错吗?