Java 如何创建只能在其父帧内浮动的JDialog
我想创建一个Java 如何创建只能在其父帧内浮动的JDialog,java,Java,我想创建一个JDialog,它只能在其父帧内浮动。也就是说,它不能从其父帧中拖出。有什么想法吗?鼠标运动监听器 谢谢 编辑: 我的应用程序基于框架而非内部框架,因此我无法使用JInternalFrame 我需要一个非模态对话框,因此,我无法使用具有内部功能的JOptionPane 改用。请参阅以获取示例。请改用。请参见示例。好的,您应该在初始问题中指定“隐藏”问题 我已经找到了一个非常棘手的解决方案,我不建议使用它,除非从开发一个更好的解决方案开始,也许从这个开始。 给定JInternalFra
JDialog
,它只能在其父帧内浮动。也就是说,它不能从其父帧中拖出。有什么想法吗?鼠标运动监听器
谢谢
编辑:
JInternalFrame
改用。请参阅以获取示例。请改用。请参见示例。好的,您应该在初始问题中指定“隐藏”问题 我已经找到了一个非常棘手的解决方案,我不建议使用它,除非从开发一个更好的解决方案开始,也许从这个开始。 给定JInternalFrame,为其提供componentMove侦听器,以禁止在隐藏位置移动它。 据我测试,它有刷新问题(也许他们可以解决),在极端情况下的稳定性也需要评估。 提供“原样”以进一步改进,而不是作为一个好的软件:-)
public void组件已移动(组件事件e){
矩形r=新矩形();
MyInternalFrame mif=MyInternalFrame.this;
JDesktopPane dp=mif.getDesktopPane();
如果(mif.getX()+mif.getWidth()>dp.getWidth()){
setLocation(mif.getDesktopPane().getWidth()-mif.getWidth(),mif.getY());
}
如果(mif.getY()+mif.getHeight()>dp.getHeight()){
setLocation(mif.getX(),mif.getDesktopPane().getHeight()-mif.getHeight());
}
如果(mif.getX()Ok,您应该在初始问题中指定“隐藏”问题
我已经找到了一个非常棘手的解决方案,我不建议使用它,除非从开发一个更好的解决方案开始,也许从这个开始。
给定JInternalFrame,为其提供componentMove侦听器,以禁止在隐藏位置移动它。
据我测试,它有刷新问题(也许他们可以解决),在极端情况下的稳定性也需要评估。
提供“原样”以进一步改进,而不是作为一个好的软件:-)
public void组件已移动(组件事件e){
矩形r=新矩形();
MyInternalFrame mif=MyInternalFrame.this;
JDesktopPane dp=mif.getDesktopPane();
如果(mif.getX()+mif.getWidth()>dp.getWidth()){
setLocation(mif.getDesktopPane().getWidth()-mif.getWidth(),mif.getY());
}
如果(mif.getY()+mif.getHeight()>dp.getHeight()){
setLocation(mif.getX(),mif.getDesktopPane().getHeight()-mif.getHeight());
}
if(mif.getX()是的,但是InternalFrame可以完全隐藏在其父框架的边缘上。有没有办法避免这种情况?我不希望内部框架或浮动对话框被其父框架部分或完全隐藏。这意味着内部框架或对话框的左侧边框不能超出其父框架的左侧边框。@5YrsLaterDBA:S请参阅中包含字符串“internal”的方法。请参阅上面的编辑。我无法使用JopOptions窗格,因为我需要一个非模式对话框来显示接收到的一些数据。是的,但InternalFrame可以完全隐藏在其父帧的边缘。有何方法避免此情况?我不希望内部帧或浮动对话框部分或完全隐藏den的父帧。这意味着内部帧或对话框的左侧边框不能超出其父帧的左侧边框。@5YrsLaterDBA:请参阅中包含字符串“internal”的方法。请参阅上面的编辑。我无法使用JOptionPane,因为我需要一个非模式对话框来显示收到的一些数据。
public void componentMoved(ComponentEvent e) {
Rectangle r = new Rectangle();
MyInternalFrame mif = MyInternalFrame.this;
JDesktopPane dp = mif.getDesktopPane();
if (mif.getX() + mif.getWidth()> dp.getWidth()) {
mif.setLocation(mif.getDesktopPane().getWidth()-mif.getWidth(),mif.getY());
}
if (mif.getY() + mif.getHeight()> dp.getHeight()) {
mif.setLocation(mif.getX(), mif.getDesktopPane().getHeight()-mif.getHeight());
}
if (mif.getX()<0) {
mif.setLocation(0, mif.getY());
}
if (mif.getY()<0) {
mif.setLocation(mif.getX(), 0);
}
}
});