使用动态数量的标签

时间:2016-10-20 16:28:10

标签: java user-interface javafx drag-and-drop

目前我正在努力解决JavaFX问题。我将尽可能详细地解释它。如果您需要任何进一步的信息,请告诉我们!

我想达到什么目的:

  • 在下图中,您可以看到我想要实现的目标
  • 我正在创建可变数量的标签(金额会不时变化)
  • 对此标签的引用存储在ArrayList中。然后将标签放在GridPane
  • 现在我希望能够在GridPane中拖放标签
  • 我想实现如下图所示的解决方案
  • 当您拖动标签时,应该以可视方式显示,我将其拖动到
  • 当传递另一个标签时,应该显示视觉效果,当我将它放在这里时会发生什么(图中的第3个)。在我放下标签之后,右侧的标签将其位置向右移动一个字段。我拿走源头的开放空间必须填充右边的标签。

这是我现在正在做的梦想的图片

enter image description here

目前我可以创建标签并将它们放在GridPane上。但是当我尝试使用.onDragListener的内部类时,我收到消息,标签必须是最终的。但是我无法使它成为最终版,因为它是在运行时创建的,引用存储在ArrayList中。

好的,这是一些代码。我希望它有所帮助。

public class Center {

    public static GridPane createCenterContent(List<Tour> tourList){

        GridPane gridPaneCenter = new GridPane();
        final List<List<Label>> customerLabelList = new ArrayList<List<Label>>();
        Label customerLabel = new Label();

        for(int i = 0 ; i < tourList.size() ; i++){
            customerLabelList.add(i, new ArrayList<Label>());
            for(int j = 0 ; j < tourList.get(i).getTour().size() ; j++){
                customerLabelList.get(i).add(new Label(tourList.get(i).getTour().get(j).getVorname() + " " + tourList.get(i).getTour().get(j).getNachname() + " \n" +
                        tourList.get(i).getTour().get(j).getStrasse() + " \n" + tourList.get(i).getTour().get(j).getAdresse()));

                customerLabelList.get(i).get(j).getStyleClass().add("kdLabelGridLayout");
                customerLabelList.get(i).get(j).setMinWidth(200);
                customerLabelList.get(i).get(j).setMinHeight(100);
                customerLabel = customerLabelList.get(i).get(j);

                customerLabel.setOnDragDetected(new EventHandler<MouseEvent>() {
                    public void handle(MouseEvent event) {
                        /* drag was detected, start a drag-and-drop gesture*/
                        /* allow any transfer mode */
                        Dragboard db = customerLabel.startDragAndDrop(TransferMode.ANY);

                        System.out.println("Label wird bewegt!");

                    }
                });

                customerLabelList.get(i).get(j).setOnDragOver(new EventHandler<DragEvent>() {
                    public void handle(DragEvent event) {
                        /* data is dragged over the target */
                        /* accept it only if it is not dragged from the same node 
                         * and if it has a string data */

                       event.acceptTransferModes(TransferMode.COPY_OR_MOVE);

                       System.out.println("Label berührt anderes Label");

                    }
                });             
                gridPaneCenter.add(customerLabelList.get(i).get(j), i, j, 1, 1);
            }
        }
        gridPaneCenter.setHgap(10);
        gridPaneCenter.setVgap(10);

        return gridPaneCenter;
    }

}

我在Dragboard db = customerLabel.startDragAndDrop(TransferMode.ANY)上收到错误;线。 Eclipse告诉我变量必须是最终的。 我有一个包含标签列表的列表。我将标签放在GridPane中并尝试为它们提供所有拖放监听器。列表中的标签数量&gt;不时有所不同。

我该怎么做才能解决问题?我非常感谢你们能给我提供的任何暗示或链接。

0 个答案:

没有答案