【问题标题】:Draggable & Resizable Container in CodeName OneCodeName One 中的可拖动和可调整大小的容器
【发布时间】:2014-02-27 03:15:29
【问题描述】:

我正在尝试将我的自定义小部件设置为可通过 setDraggable 拖动。

第 1 部分: 我的目标是创建一个带有标题(北)的矩形容器,其中包含其他组件(中心)。 仅当我拖动标题时才应拖动 MyWidget。

public class MyWidget extends Container {

    public MyWidget(String labelText) {

        // Temp size. This will be removed after actual components
        // are put into innerContainer 
        setPreferredH(100);
        setPreferredW(400);

        setLayout(new BorderLayout());

        Label title = new Label(labelText);
        addComponent(BorderLayout.NORTH, title);

        Container innerContainer = new Container();

        addComponent(BorderLayout.CENTER, innerContainer);
    }

}

Container myWidget = new MyWidget("MyWidget");
myWidget.setDraggable(true);

当我将 setDraggable() 用于标签时效果很好,但是当我将相同的方法应用于 MyWidget 时,我无法拖动。

第 2 部分: 另外,请建议我如何使这个小部件在长按时调整大小。我的目标是在长按和按下时为容器提供可调整大小的指示器边缘,小部件进入调整大小模式。然后我通过拖动边缘来调整组件的大小。如果我在 MyWidget 外部单击,调整大小模式将结束。

PS:当我点击小部件的一角时,我注意到“有时”会发生拖动。

【问题讨论】:

    标签: codenameone


    【解决方案1】:

    您正在尝试拖动正在抓取拖动事件的单个组件。我建议尝试类似:

    setLeadComponent(title);
    

    这将有效地将整个层次结构转换为一个统一的组件,该组件一起更改状态并作为一个整体工作。

    这个:

    setPreferredH(100);
    setPreferredW(400);
    

    这是一个错误,你不应该正常使用 setPreferred 但是如果你这样做你应该总是使用:

    setPreferredSize(new Dimension(400, 100));
    

    【讨论】:

    • 感谢您的帮助。 第 1 部分: 解决方案使title 接收所有事件。任何innerContainer 组件(例如,A Button)将无法接收事件。请指导我了解第 2 部分。我是CN1的新蜜蜂
    • 覆盖在标签中拖动的长按和指针(您可能需要使其可聚焦)。当长按发生时,激活一种模式,拖动指针将调整大小而不调用 super。
    猜你喜欢
    • 2011-04-06
    • 2014-01-16
    • 1970-01-01
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-05
    • 2016-02-02
    相关资源
    最近更新 更多