//当d出就把 新窗口嵌入新定义的一个shell,因为我们没有显示这个shell所有是不可见的,接着关闭这个新窗口shell,取出我们要URL,实现代码如下:
browser.addOpenWindowListener(new OpenWindowListener() {
public void open(WindowEvent paramWindowEvent) {
final Shell shell=new Shell(getShell())
final Browser browser2=new Browser(shell,SWT.NONE)
paramWindowEvent.browser=browser2
//将 事件用我的浏览器打开
paramWindowEvent.display.asyncExec(new Runnable(){
//swt对外观部件的更改必须在SWT异步线程中进行
@Override
public void run() {
// TODO 自动生成的方法存根
String url=browser2.getUrl()
browser.setUrl(url)
shell.close()
}
})
}
})
首先:有一个概念问题:你想做的窗口从传统Windows应用开发的角度理解叫MDI(多文档界面),你现在的做到的效果是SDI(单文档界面)。其次:SWT并不支持MDI的开发,Swing支持(JInternalFrame可以提供等价支持)。
最后:MDI窗口模式现在应用已经不是很多了,如果十分坚持这种做法的话建议使用VC++、Delphi、C#等开发工具实现。
这要看你用的是什么包,如果是swt包的话,
在初始化 子窗口时
写成:
shell = new Shell(display, SWT.APPLICATION_MODAL | SWT.CLOSE | SWT.MAX)
只要添加 SWT.APPLICATION_MODAL 参数就可以。
如果是AWT的话,
我转一个百度上其他帖子的答案:
楼主问为什么使用Dialog创建模式窗口,我的回答如下:
首先我们先看下在 *** 作系统中是如何创建窗口的,这是WIN32 API:
invoke CreateWindowEx,dwExStyle,lpClassName,lpWindowName,dwStyle,x,y,nWidth,nHeight,hWndParent,hMenu,hInstance,lpParam
对于一个普通的窗口,其中hMenu是指要出现的菜单的句柄,然后————当建立的窗口是子窗口时,这个参数是另一个含义,这时hMenu参数指定的是子窗口的ID号,那么结果是————节省一个参数的位置,同时子窗口也不会有菜单了。所以要想子窗口有菜单只有微软自己可以做到了。
回到模式窗口的问题上来,模式窗口是子窗口,所以不会有菜单,那为什么只能用Dialog创建模式窗口呢,这是JAVA设计是确定的,即使开放了Frame的setModal,也没用,因为得到的结果还是一个和Dialog没有区别的窗口,这种情况在其它语言里是存在的。
import java.awt.*
import java.awt.event.*
public class TestDialog {
public TestDialog() {
final Frame f1 = new Frame("1")
f1.setSize(500, 500)
f1.setVisible(true)
Button b = new Button("Exit")
TextArea jt = new TextArea(3, 0)
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(1)
}
})
Dialog dlinf1 = new Dialog(f1, "这是为了100分特地做的一段代码")
dlinf1.setSize(300, 300)
dlinf1.add(b, "North")
dlinf1.add(jt,"Center")
dlinf1.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(1)
}
})
dlinf1.setModal(true)
dlinf1.setVisible(true)
}
public static void main(String[] args) {
new TestDialog()
}
}
就是你声名一个Dialog 之后再设置他的 .setModal(true)就可以了。
setModal 就是设置窗口模式,为true,就是对当前程序来说,使窗口在最前,不关掉它,其它窗口就不能用.
其中 swt包的
SWT.APPLICATION_MODAL
是一个意思,只是使用方法不同.
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)