0

当您将一个 jlabel(B) 拖到另一个上时,我正在使用传输处理程序将文本从一个 jlabel (A) 传输到另一个。我将 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

4

0 回答 0