150分求解:菜单被其它控件遮盖的问题

oneonone 2003-10-30 12:45:19
原文:
http://expert.csdn.net/Expert/topic/2408/2408132.xml?temp=.3791315
...全文
48 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
oneonone 2003-10-31
  • 打赏
  • 举报
回复
to LoveRose(旺旺) 谢谢你的热心帮助!
可是不知道为什么如果
class MyCanvas extends JPanel
{
.........
}
的话,我这里就算是加上上面的
cp.setBackground(Color.white);
也还是不能显示白色的背景。真是胡涂了,就算JPanel默认是透明的话,它也应该显示白色的JFrame的背景色啊,不知道它到底显示的是谁的颜色。
oneonone 2003-10-31
  • 打赏
  • 举报
回复
我的程序效率太低了,画线的时候屏幕闪的我自己都受不了,还有很多需要改进的地方。再次谢谢大家的帮助!
LoveRose 2003-10-31
  • 打赏
  • 举报
回复
能解决更好了,不过我的确是拷了你的代码看的,如下:
setJMenuBar(mainMenu);
//Set layout of the pane
Container cp = getContentPane();
//cp.setLayout(new BorderLayout());
cp.add(operation,BorderLayout.NORTH);
cp.add(canvas,BorderLayout.CENTER);

我加上cp.setBackground(Color.white);
是可以将背景设成白色的
oneonone 2003-10-31
  • 打赏
  • 举报
回复
谢谢KingOf007(不妨醉一回之文白玉雪龙) 和 wobelisk() 两位大侠!
现在我的Menu 已经显示在Canvas前面了.

但在下还有一事不明,Graphics.fillRect()是一个abstract 函数,就连Graphics2D的fill 函数也是如此,不知道你们是怎样调用的。

另外我只学过Thinking In Java 4th Edition,那上面根本没有讲这么多的关于“重量级”之类深层次的东西。请问要想了解它们应该看哪些书呢?
hellomartin 2003-10-31
  • 打赏
  • 举报
回复
布局的设置问题?
oneonone 2003-10-31
  • 打赏
  • 举报
回复
to :LoveRose(旺旺)
我的Paint类中没有下面这两句代码啊?
Container cp = getContentPane();
cp.setBackground(Color.white);
另外你说能解决,不知道你是怎么解决的呢?我的MyCanvas 类已经改从JPanel类继承了,虽然在一开始显示这个JPanel的时候屏幕的颜色是灰色的,可是一旦我开始画东西上去,它就成为了正确的白色的底色,可能正如kypfos(我不是深圳人,只爱我家)所说,JPanel默认的是不透明的,一旦我开始画线(经过调试,画图功能已经正常,原来我贴的代码可能还不能画图),它就不再透明了。
kypfos(我不是深圳人,只爱我家)建议我这样设置
setOpaque(false);
在设置以前我先自己用isOpaque()检查了一下JPanel的透明属性,证明默认的是true
然后我加入了setOpaque(false);但是还是和没加时一样,只有等到开始绘图的时候背影色才恢复正常。不知道是什么原因。
wobelisk 2003-10-31
  • 打赏
  • 举报
回复
public void mouseReleased(MouseEvent e) {
if(flag != 0){
current.setEndPoint(e.getX(), e.getY());
//update(graphics);
//current.draw(graphics);
saveShapes.add(current);
repaint();
}
}

2.Graphics.drawArc() is different with Graphics.fillRect()
3.use different colors for canvas background and fillcolor. currently both are white
wobelisk 2003-10-31
  • 打赏
  • 举报
回复
KingOf007 is right. JMenu uses a JPopupMenu to display it.
JPopupMenu.setDefaultLightWeightPopupEnabled(false) must be set before create JMenu. you can put it as the first line in your init() or put it in the class initializer.

the program is full of bugs and low performance.

call repaint() when mouse released, do not call current.draw
KingOf007 2003-10-31
  • 打赏
  • 举报
回复
JPopupMenu.setDefaultLightWeightPopupEnabled(false);
KingOf007 2003-10-31
  • 打赏
  • 举报
回复
setDefaultLightWeightPopupEnabled(false);
KingOf007 2003-10-31
  • 打赏
  • 举报
回复
把JMenu设成重量级构件:)
favourl 2003-10-31
  • 打赏
  • 举报
回复
可能是容器层的问题吧
dwju1981 2003-10-31
  • 打赏
  • 举报
回复
轻量级构件是透明的,要设为不透明
OK,
我觉得有时候轻重不要混用哦……特别是有关控件层次的时候%
Yanbin_Q 2003-10-31
  • 打赏
  • 举报
回复
轻量级构件是透明的,要设为不透明

用 cp.setOpaque(false) 试试。
LoveRose 2003-10-31
  • 打赏
  • 举报
回复
可以解决,但不明白为什么
在你的Paint类中的
Container cp = getContentPane();
cp.setBackground(Color.white);
LoveRose 2003-10-31
  • 打赏
  • 举报
回复
setBackground(Color.white);
这个问题我也拿你的代码试过
的确是不能设置
怎么回事?正在考虑中
Yanbin_Q 2003-10-30
  • 打赏
  • 举报
回复
我一般用JPanel,不会被Menu档住

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧