Mac OS X - 拖放在applet上运行的Swing应用程序

时间:2012-11-07 11:16:21

标签: macos swing drag-and-drop applet

我有一些问题使我的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)

任何人都知道我做错了什么?

0 个答案:

没有答案