如何获取数据传输到的组件的价值?

时间:2012-11-12 00:54:32

标签: java swing drag-and-drop layout-manager null-layout-manager

当您将一个jlabel(B)拖到另一个jlabel(B)上时,我正在使用传输处理程序将文本从一个jlabel(A)传输到另一个jlabel。我在B上将文本更改为A的文本,但有没有办法在删除文本之前识别B的文本?

这是改变文字的原因,相当简单。 但我想只在某些条件下改变B的文本                 public void mousePressed(MouseEvent e)             {                 JComponent comp =(JComponent)e.getSource();

            TransferHandler handler = comp.getTransferHandler();
            System.out.println(e.toString());


            handler.exportAsDrag(comp, e, TransferHandler.MOVE);

            //repaint();


        }

所以我尝试重写导入数据。它的作用是我有两张牌(JLabels),并且在开始时他们以零布局出现在他们的起始位置,所以如果一张牌被拖到另一张牌上,底牌会回到它的起始位置,这就是home1和home2代表。这是有效的,但我希望文本更改为顶部卡片的文本,但这不起作用,那么有没有办法获得拖动的jlabel的值?

TransferHandler transfer = new TransferHandler("text"){
            JComponent sourced;
            Transferable datad;
            @Override
            protected void exportDone(JComponent source, Transferable data, int action) {
                if (action == MOVE){
                    ((JLabel) source).setText("");
                    sourced = source;
                    datad = data;
                }
            }

            @Override
            public int getSourceActions(JComponent c) {
                return COPY | MOVE;
            }

            @Override
            public boolean importData(JComponent comp, Transferable t)
            {
                if( !((JLabel)comp).getText().equals(""))
                {

                    String text = ((JLabel)comp).getText();
                    if(text.equals(String.valueOf(card1)) )
                    {
                        card1.setBounds(home1);
                        card1.setVisible(true);
                    }
                    if(text.equals(String.valueOf(card2)) )
                    {
                        card2.setBounds(home2);
                        card2.setVisible(true);
                    }


                }
                return true;
            }
        };

完整代码在http://pastebin.com/4mxkQY30

0 个答案:

没有答案