大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
// 窗体出现时在屏幕中央
公司主营业务:网站建设、成都网站制作、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联公司是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联公司推出什邡免费做网站回馈大家。
frame.setLocationRelativeTo(null);
// 窗体添加一个键盘事件监听者
frame.addKeyListener(mario);
// 窗体添加一个焦点事件监听者
frame.addFocusListener(mario);
// 将窗体显示出来
frame.setVisible(true);
又是你啊....貌似你在学swing或是用swing做个什么东西?如果你会java,看看java api啊,如果是java新手, 建议head first java系列丛书, 挺通俗易懂
字符集问题,Eclipse和CMD
DOS窗口默认字符集都是GBK,如果你的程序是用其他字符集编写的,就会产生乱码了。把你的字符集都改成默认的GBK字符集就OK了。
如果你的程序是在Eclipse下编写的,请查看Eclipse的
窗口---首选项---常规---工作空间---文本文件编码是不是缺省值GBK,如不是请改回来就行了。
[Panel]
Panel is the simplest container class. A panel provides space in which an ap
plication can attach any other component, including other panels.
详见java.awt.Panel
注意:以下大写指类,小写泛指对象,比如Frame指Frame类,frame泛指Frame对象。
好象是看出区别了:Frame是Window的子类,一个Frame对象就是一个有标题有边界
的顶层窗口。Panel是最简单的容器类,是Container的子类。一个Panel对象就是要给应
用程序提供空间,用来添加组件,包括其它的Panel对象。
追本溯源,其实Frame和Panel还是有些亲戚关系的:Frame是Window的直接子类,W
indow又是Container的直接子类,而Panel是Container的直接子类,它们都是从Contai
ner里扩展出来的,是叔侄关系。它们的老祖宗是Component(Container是Component的
子类),Component是基类,回溯本源到此为止,已经是根了。
Frame和Panel都是容器类,那么它们在使用上有什么区别呢?
你可以创建一个panel对象,在上面添加组件,比如单独建立一个TestPanel.java
的源文件(TestPanel extends Panel)。但是因为Panel不是顶层容器,所以你不能直
接显示你创建的这个panel对象,必须装在顶层容器里比如嵌入一个frame里,才能显示
。(为什么Frame对象可以直接显示,而Panel对象不能,文章最后有解释。)
Frame是顶层容器,一般不单独使用(注意只是一般,还是可以直接嵌入组件的),而是
习惯在frame里嵌入panel,再在panel上面添加组件。你在用Jbuilder创建一个Applica
tion(比如TestApp和TestAppFrame)的时候,在你的框架文件TestAppFrame里就会自动
生成一个叫contentPane的JPanel对象。
Panel是一般容器,可以自身嵌套(比如在panel1里嵌入panel2);但Frame已经是
顶层容器了,自身不能嵌套。
我们用得最多的JFrame和JPanel,就是Frame和Panel在Swing下的扩展(JFrame是Fr
ame子类和JPanel是Panel的子类)。
我们用Jbuilder创建Application时会自动生成一些代码,其中的frame.pack()一句
是什么意思?注:frame是一个已生成的框架类对象
我们在java.awt.Frame的源文件里找不到pack()方法的定义。看了java.awt.Window
才知
道,原来在Window类里定义了pack()和show()两个显示窗口的方法,被Frame继承了过来
。这可能也是panel无法单独使用的一个原因吧,Panel和它的直接超类Container里,都
没有定义类似pack()和show()的显示容器的方法。
当需要扩展Frame的功能或者想在实例化的多做功能的时候,就写上extends frame,
譬如想在实例化Frame的同时设定size
public class MyFrame extends Frame {
public MyFrame(String s, int width, int height) {
super(s);
super.setSize(width, height);
}
}
这样你实例化MyFrame的时候就已经设定好大小了,少写一些代码
public static void main(String args[]){
MyFrame frame = new MyFrame("My Frame", 300, 200);
}
同样功能的不继承,则需要
public static void main(String args[]){
Frame frame = new Frame("My Frame");
frame.setSize(300, 200);
}
clear?
原因在你你的class名字就是Panel.java和java.awt.Panel同名了,JVM默认搜索从本类开始,修改
import java.awt.Button;
import java.awt.Frame;
public class Panel {
/**
* @param args
*/
public static void main(String[] args) {
Frame f = new Frame();
f.setBounds(100, 100, 300, 300);
Button b = new Button("BB");
java.awt.Panel p = new java.awt.Panel();
p.add(b);
f.add(p);
f.setVisible(true);
}
}
图片看起来很模糊,隐约看到需要一个登录窗口,那就分享一下以前练习的登录窗口demo吧。
先上效果图:
登录界面
源码如下:
AbsoluteLoginFrame.java
public class AbsoluteLoginFrame extends JFrame {
private static final int LOGIN_WIDTH = 600;
private static final int LOGIN_HEIGHT = 400;
private static final long serialVersionUID = -2381351968820980500L;
public AbsoluteLoginFrame(){
//设置窗口标题
setTitle("登录界面");
//设置一个初始面板,填充整个窗口
JPanel loginPanel = new JPanel();
//设置背景颜色
loginPanel.setBackground(new Color(204, 204, 204));//#CCC
loginPanel.setLayout(null);
JPanel centerPanel = new JPanel();
centerPanel.setBackground(Color.WHITE);
centerPanel.setBounds(114, 70, 360, 224);
centerPanel.setLayout(null);
JLabel jLabel = new JLabel("用户名:");
jLabel.setOpaque(true);
jLabel.setBackground(Color.YELLOW);
jLabel.setBounds(60, 60, 54, 20);
JLabel label = new JLabel("密 码:");
label.setOpaque(true);
label.setBackground(Color.CYAN);
label.setBounds(60, 90, 54, 20);
JTextField textField = new JTextField(15);
textField.setBounds(130, 60, 166, 21);
JPasswordField passwordField = new JPasswordField(15);
passwordField.setBounds(130, 90, 166, 21);
JButton jButton = new JButton("登录");
jButton.setBounds(148, 120, 62, 28);
centerPanel.add(jLabel);
centerPanel.add(label);
centerPanel.add(textField);
centerPanel.add(jButton);
centerPanel.add(passwordField);
loginPanel.add(centerPanel);
getContentPane().add(loginPanel);//将初始面板添加到窗口中
setSize(LOGIN_WIDTH, LOGIN_HEIGHT);//设置窗口大小
setLocation(Screen.getCenterPosition(LOGIN_WIDTH, LOGIN_HEIGHT));//设置窗口位置
setDefaultCloseOperation(EXIT_ON_CLOSE);//设置窗口默认关闭方式
setResizable(false);
setVisible(true);
}
public static void main(String[] args) {
new AbsoluteLoginFrame();
}
}
Screen.java
public class Screen {
private int width;
private int height;
public Screen(){
Toolkit toolkit = Toolkit.getDefaultToolkit();
Dimension screenSize = toolkit.getScreenSize();
this.width = screenSize.width;
this.height = screenSize.height;
}
public static Point getCenterPosition(int width, int height){
Screen screen = new Screen();
int x = (screen.getWidth() - width) / 2;
int y = (screen.getHeight() - height) / 2;
return new Point(x, y);
}
public int getWidth() {
return width;
}
public void setWidth(int width) {
this.width = width;
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
}