Swing アプリケーションを Mac OSX で動作させるのに問題があります。このスイング アプリケーションは、ブラウザ内のアプレットで実行する必要があります。
この問題は mac osx に限定されており、アプレットがブラウザで実行されている場合にのみ発生することに注意してください。
問題は、ドロップ イベントがアプレット内のコンポーネントに適切に配信されないことです。次の例には、ラベルと入力フィールドが含まれています。ラベルから入力フィールドにドラッグすると、ラベルのテキストが入力フィールドにコピーされます。
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);
}
}
}
このコードを使用して、ブラウザでアプレットを実行できるように、次の html で使用される .jar ファイルを生成する必要があります。
<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 でも発生します)
誰が私が間違っているのか知っていますか?