【发布时间】:2011-11-27 21:46:33
【问题描述】:
所以,我很难解释我的问题,我希望这很清楚。请告诉我是否可以更好地澄清任何事情!
我有一个使用 gwt-dnd 拖放小部件的 GWT Web 应用程序。我有扩展 AbsolutePanel 并显示标题和编号的 Notecard 对象(如 3x5 记事卡)。
我有一个垂直的 InsertPanel(一个 gwt FlowPanel),Notecard 对象插入其中,一个在下一个之上(这里的顺序很重要)。假设 InsertPanel 中包含 5 个记事卡,全部垂直对齐。如果我选择其中一个,将其移动到 InsertPanel 中的不同索引,然后将其放下,记事卡的正文将被放置在应有的位置,但随后标题和编号与记事卡的正文分开并一直推到 InsertPanel 的顶部。如果我继续移动记事卡,所有记事卡主体都按计划运行,但所有标题和数字都在 InsertPanel 的最顶部堆叠在一起。
我是否缺少将 Notecard 小部件组件“粘合”在一起的东西?我尝试让 Notecard 扩展 Composite 而不是 AbsolutePanel,但我得到了相同的行为。
作为参考,我在下面附上了相关的 Notecard 类:
Notecard.java:
public class Notecard extends AbsolutePanel implements HasAllMouseHandlers {
private Long ID;
private String storyTitle;
private int points;
private Button dragHandleButton;
private AbstractProject project;
/*
* Constructors
*/
public Notecard( Long Id, String ttl, int pts ) {
this.ID = Id;
this.storyTitle = ttl;
this.points = pts;
setStyleName("Notecard-Wrapper");
setSize("100px", "60px");
Label titleLabel = new Label(storyTitle);
titleLabel.setStyleName("Notecard-TitleLabel");
add(titleLabel, 0, 0);
titleLabel.setSize("96px", "28px");
Label pointsLabel = new Label("" + points);
pointsLabel.setStyleName("Notecard-PointsLabel");
add(pointsLabel, 0, 35);
pointsLabel.setSize("100px", "20px");
dragHandleButton = new Button("");
dragHandleButton.setText("");
dragHandleButton.setStyleName("dragHandleButton");
add(dragHandleButton, 0, 0);
dragHandleButton.setSize("100px", "60px");
Button addTaskButton = new Button("+");
addTaskButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
popupAddTaskPopup();
}
});
addTaskButton.setStyleName("Notecard-AddTaskButton");
addTaskButton.setText("+");
add(addTaskButton, 0, 40);
addTaskButton.setSize("20px", "20px");
}
public void popupAddTaskPopup() {
project.popupAddTaskPopupPanel( ID );
}
/*
* GETTERS & SETTERS
*/
public String getStoryTitle() {
return storyTitle;
}
public void setStoryTitle(String title) {
this.storyTitle = title;
}
public int getPoints() {
return points;
}
public void setPoints(int points) {
this.points = points;
}
public Long getID() {
return ID;
}
public Button getDragHandle() {
return dragHandleButton;
}
/*
* Implementation for HasAllMouseHandlers
*/
@Override
public HandlerRegistration addMouseDownHandler(MouseDownHandler handler) {
return dragHandleButton.addMouseDownHandler(handler);
}
@Override
public HandlerRegistration addMouseUpHandler(MouseUpHandler handler) {
return dragHandleButton.addMouseUpHandler(handler);
}
@Override
public HandlerRegistration addMouseOutHandler(MouseOutHandler handler) {
return dragHandleButton.addMouseOutHandler(handler);
}
@Override
public HandlerRegistration addMouseOverHandler(MouseOverHandler handler) {
return dragHandleButton.addMouseOverHandler(handler);
}
@Override
public HandlerRegistration addMouseMoveHandler(MouseMoveHandler handler) {
return dragHandleButton.addMouseMoveHandler(handler);
}
@Override
public HandlerRegistration addMouseWheelHandler(MouseWheelHandler handler) {
return dragHandleButton.addMouseWheelHandler(handler);
}
我还使用我实现的放置控制器来处理 onDrop() 事件。但它只是为 onDrop() 使用 AbstractInsertPanelDropController 实现,然后为持久性机制添加一些功能。
【问题讨论】:
-
哦,我刚刚意识到,如果人们能看到问题,它可能会有所帮助。这个应用程序现在实际上正在 Google App Engine 上运行,地址为 csci3308-csci4448-finalproject.appspot.com。你必须有一个谷歌帐户才能使用它,但至少你可以看到问题。只需创建一个新的用户故事,然后尝试将其拖到待办事项列表中。
标签: java gwt drag-and-drop