Java swing中,按左上角图标弹出来的菜单(如图)叫什么?怎么屏蔽?

弹出这个菜单,不仅仅单击左上角图标。在标题栏右键、按Alt+空格、先按Alt再按回车同样可以弹出这个菜单,因此取消窗体装饰、改变窗体样式不是最终的解决方案。

今天无聊翻了下java swing和awt的书看了下,搞了个测试窗口,又改了下icon图标,然后也碰到这个问题。

以下是资料:

在JDK1.4以前,我们只有一种方式来去掉窗口的标题栏,那就是直接使用JWindow,用JWindow来代替JFrame使用。但用过JWindow的人一定知道,JWindow在操作系统的任务栏是不可见的,这样我们就无法在几个视窗之间来切换到这个窗口了。 

使用JWindow也是很多人知道的一种去掉标题栏的方式。但从Java1.4开始,有一种新的方式可以使用,我们来看看。 

现在我们创建一个类并继承于JFrame, 

public class DecoratedFrame extends JFrame { 

public DecoratedFrame() {

this.getContentPane().add(new JLabel("Just a test."));

this.setUndecorated(true); // 去掉窗口的装饰

this.getRootPane().setWindowDecorationStyle(JRootPane.NONE); //采用指定的窗口装饰风格

this.setSize(300,150); 

public static void main(String[] args) {

JFrame frame = new DecoratedFrame();

frame.setVisible(true); 

请看加了注释的两行,要去掉标题栏,关键代码就是这两行,第1行去掉窗口的装饰,第2行为窗口指定头饰风格。在这里,可以通过调用this.getRootPane().setWindowDecorationStyle()方法为窗口指定以下的装饰风格: 

NONE                  无装饰(即去掉标题栏) 

FRAME                 普通窗口风格 

PLAIN_DIALOG          简单对话框风格 

INFORMATION_DIALOG    信息对话框风格 

ERROR_DIALOG          错误对话框风格 

COLOR_CHOOSER_DIALOG 拾色器对话框风格 

FILE_CHOOSER_DIALOG   文件选择对话框风格 

QUESTION_DIALOG       问题对话框风格 

WARNING_DIALOG        警告对话框风格 

在使用Jframe的时候,普遍都会有标题栏,还有最小化,最大化,关闭按纽的,还要实现拖动窗体的功能。 

这样的话,对我们实现自定义样式的窗体是很有影响的, 

1) 要去掉标题栏: 

jFrame.setUndecorated(true); 

// 这样就可以去掉Jframe中对window的装饰了, 

2) 去掉标题栏,我们就有可能要给程序写代码提供最小化,最大化,关闭的操作,如何实现? 

只要给按纽添加MouseListener, 

在mouseClick中的调用 

jFrame.setExtendedState(jFrame.ICONIFIED); //最小化 

if(jFrame.getExtendedState() != jFrame.MAXIMIZED_BOTH) 

jFrame.setExtendedState(jFrame.MAXIMIZED_BOTH); 

else 

jFrame.setExtendedState(jFrame.NORMAL); 

// 最大化或正常状态 

System.exit(0); 

// 关闭,退出程序 

3) 要拖动窗体的功能: 

只要给窗体中的某个组件添加如下代码就行了: 

csdn里一个叫乌鸦来袭的用户的回复。

具体思路是去掉标题栏装饰,然后使用JRootPane里的装饰风格。

修改完之后是下图的样子,奇丑无比。

最后再补充一句:我个人有点强迫症,所以才会尝试去解决这个问题,后来百度到一个信息,eclipse点左上角的icon图标 以及在标题栏按右键,也会出现这个问题。

这个我以前还从来没注意到,毕竟关eclipse都是直接右上角关掉就完事了。(这个问题可能涉及到windows特性之类的问题,毕竟java跨平台,没有办法随心所欲的操作windows操作系统的所有元素,IBM工程师都懒得去解决的问题。就不建议大家伤脑筋去解决啦。)

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-04-30
如果单单去掉那一个地方的话,你去api找找看看他继承的是组建,然后重写那部分组件就可以!
这里有个去掉所有窗体装饰的方法:

setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setUndecorated(true); // 去掉窗口的装饰追问

不去掉窗口的装饰的情况下,能否屏蔽?

追答

//这样可以满足你的需求,那个弹出的menu在API上面叫做“关闭窗体的小部件”

import javax.swing.JFrame;
public class frame extends JFrame{
public frame() {
setUndecorated(true); // 去掉窗口的装饰
setBounds(30,40,400,400);
setVisible(true);
for (int i = 0; i < 8; i++) {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
getRootPane().setWindowDecorationStyle(i);
//控制样式
}
}
public static void main(String[] args) {
new frame();
}
}

第2个回答  2013-05-02
弹出菜单,把这事件屏蔽了就可以了追问

兄弟,详细点。这个东西貌似是系统的,如何屏蔽。

相似回答