0

転送ハンドラーを使用して、ある jlabel (B) を別の jlabel (A) にドラッグしたときに、ある 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();


        }

そこで、インポートデータをオーバーライドしてみました。2 枚のカード (JLabels) があり、最初は null レイアウトの開始位置に表示されるため、一方のカードをもう一方のカードにドラッグすると、一番下のカードが開始位置に戻ります。 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