プログラマメモ2 - programmer no memo2

JPanelからドラッグアンドドロップで背景の色移動させたい 2008/12/19

Javaです。JPanelからドラッグアンドドロップで背景の色移動させたいと思いました。
たとえば、JTextFieldとかには、setDragEnabledメソッドがあったりするのですが、JPanelにはないわけで。
それで、うーんとなやんだわけです。

参考



それで、MouseAdapterを使ってmousePressedの時にTransferHandlerのexportAsDragを使って何とか実現。

以下コード
package dnd;

import java.awt.Color;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.TransferHandler;

public class TestA {

public static void main(String[] args) {
createFrame(Color.BLUE);
createFrame(Color.RED);
}

static JFrame createFrame(final Color c) {
JFrame frame = new JFrame();

frame.setSize(300, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new JPanel() {
{
add(new JTextField() {
private static final long serialVersionUID = 1L;
{
setDragEnabled(true);
setText("aaaaaaaaaaaaaaaaa");
setTransferHandler(new TransferHandler("background") {
});
}
}
);

setBackground(c);
setTransferHandler(new TransferHandler("background") {
});

addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
JComponent component = (JComponent) e.getSource();
TransferHandler handler = component
.getTransferHandler();
handler
.exportAsDrag(component, e,
TransferHandler.COPY);
}
});
}
} // panel ... end

);
frame.setVisible(true);
return frame;
}

}

: