java 图形编程问题
这段代码中,如果我继承的是Frame,背景颜色就可以显示出来,如果继承的是JFrame就显示不出来,为什么?classMyFrameextendsJFrame{publi...
这段代码中,如果我继承的是Frame,背景颜色就可以显示出来,如果继承的是JFrame就显示不出来,为什么?
class MyFrame extends JFrame
{
public MyFrame()
{
this.setBackground(Color.BLUE);
this.setAlwaysOnTop(true);
this.setResizable(false);
this.setSize(200, 200);
}
} 展开
class MyFrame extends JFrame
{
public MyFrame()
{
this.setBackground(Color.BLUE);
this.setAlwaysOnTop(true);
this.setResizable(false);
this.setSize(200, 200);
}
} 展开
4个回答
展开全部
LZ可以参考一下Java文档的JRootPane类和RootPaneContainer接口的说明
默认情况下JFrame的getContentPane().add()和直接add是一样的
都会作用在JFrame的JRootPane组件的contentPane上(轻量级容器)
如果设置setRootPaneCheckingEnabled(false)的话,直接add将是直接作用在JFrame上(重量级容器)
容器之间的的层次结构,在Jave文档里有描述
至于JFrame和Frame的区别,估计也就是,前者是可以支持轻量级开发(通过设置可以转成重量级),后者则是重量级
所谓轻重级,估计是针对系统底层管理而言
也就是JFrame这些轻量级组件都是完全由JVM管理,即如果是Win系统的话,通过FindWindow等Window的API是取不到该组件的句柄的,也不能对该组件通过WinAPI发送消息控制,而Frame要受到底层系统的管理,即如果是Win系统的话,可以通过Window的API进行消息拦截和控制
默认情况下JFrame的getContentPane().add()和直接add是一样的
都会作用在JFrame的JRootPane组件的contentPane上(轻量级容器)
如果设置setRootPaneCheckingEnabled(false)的话,直接add将是直接作用在JFrame上(重量级容器)
容器之间的的层次结构,在Jave文档里有描述
至于JFrame和Frame的区别,估计也就是,前者是可以支持轻量级开发(通过设置可以转成重量级),后者则是重量级
所谓轻重级,估计是针对系统底层管理而言
也就是JFrame这些轻量级组件都是完全由JVM管理,即如果是Win系统的话,通过FindWindow等Window的API是取不到该组件的句柄的,也不能对该组件通过WinAPI发送消息控制,而Frame要受到底层系统的管理,即如果是Win系统的话,可以通过Window的API进行消息拦截和控制
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
package com.baidu;
import java.awt.Color;
import javax.swing.JFrame;
public class MyFrame extends JFrame {
private static final long serialVersionUID = 1L;
public MyFrame() {
this.getContentPane().setBackground(Color.BLUE);
this.setAlwaysOnTop(true);
this.setResizable(false);
this.setSize(200, 200);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new MyFrame();
}
}
这样能行。解释的话,你可以去看看关于JFrame和Frame的区别。我没有看懂不过
import java.awt.Color;
import javax.swing.JFrame;
public class MyFrame extends JFrame {
private static final long serialVersionUID = 1L;
public MyFrame() {
this.getContentPane().setBackground(Color.BLUE);
this.setAlwaysOnTop(true);
this.setResizable(false);
this.setSize(200, 200);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new MyFrame();
}
}
这样能行。解释的话,你可以去看看关于JFrame和Frame的区别。我没有看懂不过
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
JFrame是swing组件,Frame是AWT组件。
JFrame要通过getContentPane先取得窗口容器,然后再设置Background就可以了。。
JFrame要通过getContentPane先取得窗口容器,然后再设置Background就可以了。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
class MyFrame extends JFrame
{
public MyFrame()
{
Container c = getContentPane();
c.setBackground(Color.BLUE);
this.setBackground(Color.BLUE);
this.setAlwaysOnTop(true);
this.setResizable(false);
this.setSize(200, 200);
}
这样就可以了。
Container c 是JFrame里面的一个容器,用来放各类组件
{
public MyFrame()
{
Container c = getContentPane();
c.setBackground(Color.BLUE);
this.setBackground(Color.BLUE);
this.setAlwaysOnTop(true);
this.setResizable(false);
this.setSize(200, 200);
}
这样就可以了。
Container c 是JFrame里面的一个容器,用来放各类组件
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询