【发布时间】: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