- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用拖放组件在java swing中进行练习,我遇到了一个问题,我将其放入JPanel(一个JInternal Frame)中
, 它是可移动的,
i want to make it un-moveable
,使用哪个事件?我该怎么做 ?我在互联网上搜索但不幸的是找不到解决方案。
我在互联网上找到了这个,但我想借助 swing 中的事件选项来完成它。
// Make first internal frame unmovable
JInternalFrame[] frames = frame.desktop.getAllFrames();
JInternalFrame f = frames[0];
BasicInternalFrameUI ui = (BasicInternalFrameUI)f.getUI();
Component north = ui.getNorthPane();
MouseMotionListener[] actions = // there is no option for MouseMotionListener in the event option
(MouseMotionListener[])north.getListeners(MouseMotionListener.class);
for (int i = 0; i < actions.length; i++)
north.removeMouseMotionListener( actions[i] );
最佳答案
DesktopManager
负责所有内部框架的操作。所以你可以使用 proxy pattern 重新定义它使某些框架不可移动。这是一个不完整的示例(抱歉,我没有测试过这段代码,所以我不确定它是否有效)。
private static class ProxyDesktopManager implements DesktopManager {
private final DesktopManager delegate;
public ProxyDesktopManager(DesktopManager delegate) {
this.delegate = Objects.requireNonNull(delegate);
}
// Check whether frame is moveable
private boolean checkFrameMovable(JComponent frame) {
if (frame instanceof JInternalFrame) {
// TODO check whether the frame if movable
}
return false;
}
@Override
public void beginDraggingFrame(JComponent f) {
if (checkFrameMovable(f)) {
delegate.beginDraggingFrame(f);
}
}
@Override
public void dragFrame(JComponent f, int newX, int newY) {
if (checkFrameMovable(f)) {
delegate.dragFrame(f, newX, newY);
}
}
@Override
public void endDraggingFrame(JComponent f) {
if (checkFrameMovable(f)) {
delegate.endDraggingFrame(f);
}
}
@Override
public void openFrame(JInternalFrame f) {
delegate.openFrame(f);
}
@Override
public void closeFrame(JInternalFrame f) {
delegate.closeFrame(f);
}
@Override
public void maximizeFrame(JInternalFrame f) {
delegate.maximizeFrame(f);
}
@Override
public void resizeFrame(JComponent f, int newX, int newY, int newWidth, int newHeight) {
delegate.resizeFrame(f, newX, newY, newWidth, newHeight);
}
// IMPORTANT: simply delegate all another methods like openFrame or
// resizeFrame
}
现在您可以为您的 JDesktopPane 使用此代理类
JDesktopPane desktop = new JDesktopPane();
desktop.setDesktopManager(new ProxyDesktopManager(desktop.getDesktopManager()));
关于java - 使 JInternal Frame 不可移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50502065/
我正在通过从 JTextField 获取名称来打开一个 JInternal 框架然后**然后在运行时创建它的对象**,问题是如果我在 textBox 中写入 10 次不同的内部框架名称,然后单击按钮,
通过单击“添加 Int Frame”按钮,我将 JInternalFrame 绘制在一个 tabbedPane 上,在这个 HORIZONTAL 分隔的 JSplitPane 的右侧。 在此 Inte
我正在使用拖放组件在java swing中进行练习,我遇到了一个问题,我将其放入JPanel(一个JInternal Frame)中 , 它是可移动的, i want to make it un-mo
我需要 JPanel 区域内的 JInternalFrame 的一些帮助。我有一个 JFrame,其中包含当我单击其菜单项之一时,JPanel 添加到其 ContentPane.JFrame 包含菜单
我正在使用 JDesktopPane 和 Jinternal Frame。 我想锁定 JDesktopPane 内的 Jinternal Frame 。 建议需要更改哪些方法或属性。 最佳答案 你可以
friend 们大家好,我有一个 swing 应用程序,它扩展了 JFrame 并具有 JInternalFrames。我需要从 JInternalFrame 中的 ActionEvent 刷新 Ma
如何获取添加到 j 内部框架的 j 滚动 Pane 内的任何内容 基本上,我有一个由sql中的数据组成的j表...j内部框架有表的名称...每当用户想要编辑表时我都想获取表的名称.. ..j 表位于
我是一名优秀的程序员,十分优秀!