【问题标题】:Remove Panel from layout only仅从布局中删除面板
【发布时间】:2018-03-12 20:34:53
【问题描述】:

我有一个布局为空的框架。有一个面板连接到它,它有一个流布局。

我的代码有它,以便按下按钮创建一个新面板,该面板被添加到第一个面板(连接到框架的那个)。然后我有一个鼠标监听器,可以让你拖动新创建的面板。


panel.addMouseListener(new MouseAdapter() {
    @Override
    public void mousePressed(MouseEvent me) {
            x = me.getX();
            y = me.getY();
    }
});
panel.addMouseMotionListener(new MouseMotionAdapter() {
    @Override
    public void mouseDragged(MouseEvent me) {
        me.translatePoint(me.getComponent().getLocation().x-x, me.getComponent().getLocation().y-y);
        panel.setLocation(me.getX(), me.getY());
    }
});

但是,当我按下按钮创建一个新面板时,它会创建一个新面板,同时将它返回到流布局。我试过删除面板,但是当我将新面板拖到它上面时,它会被删除。而如果我在移除面板后重新验证并重新绘制面板,它就会消失。

那么如何防止它被擦除或仅从布局中删除?

【问题讨论】:

  • 请创建并发布您的minimal reproducible example
  • "frame where the layout is null" -- 请注意,这通常是一个非常糟糕的主意。通常最好使用布局和拖动图像或形状,而不是组件。在更改容器中的任何组件后,不要忘记在容器上调用repaint()。如果容器使用布局管理器,您还可以调用 revalidate()
  • 你对问题的口头描述我不清楚。如果您有一个带有使用 FlowLayout 的按钮的 JPanel,那么框架的布局应该是 BorderLayout。然后根据您的要求将此面板添加到 NORTH/SOUTH。然后,您创建第二个面板,其中包含您添加到框架中心的空布局。然后,当您单击按钮时,您会将新面板添加到该面板的中心。
  • 您可能需要考虑将Drag Layout 用于CENTER 面板。它提供了一些布局功能,同时允许您将组件拖动到新位置。

标签: java swing jpanel layout-manager null-layout-manager


【解决方案1】:

尝试将布局更改为 null,我认为您的要求是不可能的。

【讨论】:

    猜你喜欢
    • 2014-08-07
    • 2020-10-23
    • 1970-01-01
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-07
    • 1970-01-01
    相关资源
    最近更新 更多