【问题标题】:Java TransferHandler with Jbuttons to update Jbutton Text带有 Jbuttons 的 Java TransferHandler 来更新 Jbutton 文本
【发布时间】:2015-08-11 15:18:17
【问题描述】:

我的问题是如何知道拖放位置的文本是什么。这是当前的工作代码。

     gameCell.addMouseListener(new MouseAdapter() {
         public void mousePressed(MouseEvent e){
             JButton button = (JButton)e.getSource();

             int currentNumber = Integer.parseInt(button.getText());

             TransferHandler handle = button.getTransferHandler();
             handle.exportAsDrag(button, e, TransferHandler.COPY);

所以想法是有一个游戏板,它只是一堆单元格(所有 JButton),一个大桌子。当我将一个单元格拖动到另一个单元格时,拖动的单元格的值将成为单击的单元格的值,因此在被拖动的单元格复制之前,如何告诉 JButton 单元格的原始值。

【问题讨论】:

    标签: java swing drag-and-drop jbutton


    【解决方案1】:

    如果您只是想将文本从一个按钮“复制”到另一个按钮,那么您可以使用如下代码:

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    public class DragIcon extends JPanel
    {
        public DragIcon()
        {
            TransferHandler iconHandler = new TransferHandler( "icon" );
            MouseListener dragListener = new DragMouseAdapter();
    
            JLabel label1 = new JLabel("Label1");
            label1.setTransferHandler( iconHandler );
            label1.addMouseListener(dragListener);
            label1.setIcon( new ImageIcon("copy16.gif") );
    
            JLabel label2 = new JLabel("Label2");
            label2.setTransferHandler( iconHandler );
            label2.addMouseListener(dragListener);
    
            add( label1 );
            add( label2 );
        }
    
        private class DragMouseAdapter extends MouseAdapter
        {
            public void mousePressed(MouseEvent e)
            {
                JComponent c = (JComponent)e.getSource();
                TransferHandler handler = c.getTransferHandler();
                handler.exportAsDrag(c, e, TransferHandler.COPY);
    //          handler.exportAsDrag(c, e, TransferHandler.MOVE);
            }
        }
    
        private static void createAndShowGUI()
        {
            JFrame frame = new JFrame("Drag Icon");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.add(new DragIcon());
            frame.setLocationByPlatform( true );
            frame.setSize(200, 100);
            frame.setVisible( true );
        }
    
        public static void main(String[] args)
        {
            EventQueue.invokeLater(new Runnable()
            {
                public void run()
                {
                    createAndShowGUI();
                }
            });
        }
    }
    

    默认的TransferHandler 允许您指定要复制的属性。在我的示例中,我正在复制图标。在您的情况下,您将使用:

    TransferHandler iconHandler = new TransferHandler( "text" );
    

    复制文本。

    请注意,在我的示例中,我还尝试将图标从一个标签“移动”到另一个标签,但它不起作用。我不确定需要更改哪些内容才能移动属性。

    【讨论】:

    • 有没有办法获取数据被拖到的对象的信息。那么被拖动的文本将替换的文本是什么。
    • 我确定有,但我不是 DnD 专家,所以我建议您阅读 Drag and Drop 上的 Swing 教程中的部分以获取基本信息和示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-18
    • 2011-01-10
    • 1970-01-01
    • 2018-10-22
    • 1970-01-01
    • 1970-01-01
    • 2015-03-31
    相关资源
    最近更新 更多