基本上我打算在JFrame上放置一些按钮,文本字段,标签等,我想让用户可以用鼠标在JFrame上移动不同的组件.
我已经看过使用MouseListeners的各种方法,子类化JComponent代码,DropSource/DropTarget实现等等,但我不确定哪种是"推荐"方式(我不需要支持不同帧/应用程序之间的"拖放")这是大多数例子似乎做的事情).
我正在实现一个功能,将JLabel的Textattribute拖放到JTable的单元格中.所以我为表创建了一个自定义TransferHandler.但每一个电话
support.isDataFlavorSupported(DataFlavor.stringFlavor)
Run Code Online (Sandbox Code Playgroud)
返回false
如何确保我的TransferHandler能够导入字符串?
这是来源
public class TableHandler extends TransferHandler {
private static final long serialVersionUID = 1L;
@Override
public boolean canImport(TransferSupport support) {
if (!support.isDrop()) {
return false;
}
//only Strings
if(!support.isDataFlavorSupported(DataFlavor.stringFlavor)){
return false;
}
return true;
}
@Override
public boolean importData(TransferSupport support) {
if (!canImport(support)) {
return false;
}
Transferable tansferable = support.getTransferable();
String line;
try {
line = (String) tansferable
.getTransferData(DataFlavor.stringFlavor);
} catch (Exception e) {
return false;
}
JTable.DropLocation dl = (JTable.DropLocation) support
.getDropLocation();
int column …Run Code Online (Sandbox Code Playgroud) 我有一个包含列表和按钮的面板.列表设置MouseAdapter为mouseClick().我添加到面板MouseAdapter与mousePressed()和mouseReleased()和MouseMotionAdapter带mouseDragged.
拖放仅在单击面板时有效.
即使我点击列表,如何使拖动工作?
简单的考试:
public class DragTest extends JFrame{
private boolean drag;
private Point btnCoord;
private Point startPoint;
public DragTest(){
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setSize(500,500);
setLayout(null);
final JPanel panel = new JPanel();
final JButton button = new JButton();
button.setText("Button");
button.setSize(30,60);
button.setLocation(50, 50);
panel.setLayout(null);
setContentPane(panel);
panel.addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseDragged(MouseEvent e) {
if (drag){
panel.setLocation(btnCoord.x-(startPoint.x-e.getX()),btnCoord.y-(startPoint.y-e.getY()));
}
}
});
panel.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
drag …Run Code Online (Sandbox Code Playgroud)