2

我在使我的 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 中)

有人知道我在做什么错吗?

4

0 回答 0