详解如何使用Java编写图形化的窗口

 更新时间:2015年10月08日 16:14:31   投稿:goldensun  
这篇文章主要介绍了如何使用Java编写图形化的窗口,是Java的本地GUI软件开发的基础,需要的朋友可以参考下

窗口是GUI编程的基础,小应用程序或图形界面的应用程序的可视组件都放在窗口中,在GUI中,窗口是用户屏幕的一部分,起着在屏幕中一个小屏幕的作用。有以下三种窗口:
Applet窗口:Applet类管理这个窗口,当应用程序程序启动时,由系统创建和处理;
框架窗口(JFrame):这是通常意义上的窗口,它支持窗口周边的框架、标题栏,以及最小化、最大化和关闭按钮;
一种无边框窗口(JWindow):没有标题栏,没有框架,只是一个空的矩形。

用Swing中的JFrame类或它的子类创建的对象就是JFrame窗口。

JFrame类的主要构造方法:

  • JFrame():创建无标题的窗口对象;
  • JFrame(String s):创建一个标题名是字符串s的窗口对象。

JFrame类的其他常用方法:

  • setBounds(int x,int y,int width,int height):参数x,y指定窗口出现在屏幕的位置;参数width,height指定窗口的宽度和高度。单位是像素。
  • setSize(int width,int height):设置窗口的大小,参数width和height指定窗口的宽度和高度,单位是像素。
  • setBackground(Color c):以参数 c设置窗口的背景颜色。
  • setVisible(boolean b):参数b设置窗口是可见或不可见。JFrame默认是不可见的。
  • pack():用紧凑方式显示窗口。如果不使用该方法,窗口初始出现时可能看不到窗口中的组件,当用户调整窗口的大小时,可能才能看到这些组件。
  • setTitle(String name):以参数name设置窗口的名字。
  • getTitle():获取窗口的名字。
  • setResiable(boolean m):设置当前窗口是否可调整大小(默认可调整大小)。

Swing里的容器都可以添加组件,除了JPanel及其子类(JApplet)之外,其他的Swing容器不允许把组件直接加入。其他容器添加组件有两种方法:
一种是用getContentPane()方法获得内容面板,再将组件加入。例如,例5.1程序中的代码:

  mw.getContentPane().add(button);


该代码的意义是获得容器的内容面板,并将按钮button添加到这个内容面板中。
另一种是建立一个JPanel对象的中间容器,把组件添加到这个容器中,再用setContentPane()把这个容器置为内容面板。例如,代码:

  JPanel contentPane = new JPanel();
  …
  mw.setContentPane(contentPane);


以上代码把contentPane置成内容面板。

【例】一个用JFrame类创建窗口的Java应用程序。窗口只有一个按钮。

import javax.swing.*;
public class Example5_1{
  public static void main(String args[]){
    JFrame mw = new JFrame(“我的第一个窗口”);
    mw.setSize(250,200);
    JButton button = new JButton(“我是一个按钮”);
    mw.getContentPane().add(button);
    mw.setVisible(true);
  }
}

用Swing 编写GUI程序时,通常不直接用JFrame创建窗口对象,而用JFrame派生的子类创建窗口对象,在子类中可以加入窗口的特定要求和特别的内容等。

【例】定义JFrame派生的子类MyWindowDemo创建JFrame窗口。类MyWindowDemo的构造方法有五个参数:窗口的标题名,加放窗口的组件,窗口的背景颜色以及窗口的高度和宽度。在主方法中,利用类MyWindowDemo创建两个类似的窗口。

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Example5_2{
  public static MyWindowDemo mw1;
  public static MyWindowDemo mw2;
  public static void main(String args[]){
    JButton static butt1 = new JButton(“我是一个按钮”);
    String name1 = “我的第一个窗口”;
    String name2 = “我的第二个窗口”;
    mw1 = new MyWindowDemo(name1,butt1,Color.blue,350,450);
    mw1.setVisible(true);
    JButton butt2 = new JButton(“我是另一个按钮”);
    mw2 = new MyWindowDemo(name2,butt2,Color.magenta,300,400);
    mw2.setVisible(true);
  }
}
class MyWindowDemo extends JFrame{
  public MyWindowDemo(String name,JButton button,Color c,int w,int h){
    super();
    setTitle(name);
    setSize(w,h);
    Container con = getContentPane();
    con.add(button);
    con.setBackground(c);
  }
}

显示颜色由java.awt包的Color类管理,在Color类中预定了一些常用的颜色,参见表11-3。JFrame类的部分常用方法参见下表。
Color 类中定义的常用颜色

JFrame 类的部分常用方法

相关文章

  • SpringSecurity登录使用JSON格式数据的方法

    SpringSecurity登录使用JSON格式数据的方法

    这篇文章主要介绍了SpringSecurity登录使用JSON格式数据的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-02-02
  • SpringMVC 拦截器的使用示例

    SpringMVC 拦截器的使用示例

    这篇文章主要介绍了SpringMVC 拦截器的使用示例,帮助大家更好的理解和学习使用SpringMVC,感兴趣的朋友可以了解下
    2021-04-04
  • springboot普通类中如何获取session问题

    springboot普通类中如何获取session问题

    这篇文章主要介绍了springboot普通类中如何获取session问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • java中List<对象>如何根据对象的一个属性进行去重

    java中List<对象>如何根据对象的一个属性进行去重

    这篇文章主要给大家介绍了关于java中List<对象>如何根据对象的一个属性进行去重的相关资料,在开发中可能会遇到很多需要去重的情况,比如Person对象有name跟age两个属性,需要根据age进行去重,需要的朋友可以参考下
    2023-08-08
  • springboot2.0集成rabbitmq的示例代码

    springboot2.0集成rabbitmq的示例代码

    这篇文章主要介绍了springboot2.0集成rabbitmq的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • Java测试题 实现一个注册功能过程解析

    Java测试题 实现一个注册功能过程解析

    这篇文章主要介绍了Java测试题 实现一个注册功能过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • mybatis插入数据后如何返回新增数据的id值

    mybatis插入数据后如何返回新增数据的id值

    当往mysql数据库插入一条数据时,有时候需要知道刚插入的信息,下面这篇文章主要给大家介绍了关于mybatis插入数据后如何返回新增数据id值的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • java反射的作用知识点总结

    java反射的作用知识点总结

    在本篇文章里小编给大家整理的是关于java反射的作用知识点总结,需要的朋友们可以学习下。
    2020-02-02
  • redis scan命令导致redis连接耗尽,线程上锁的解决

    redis scan命令导致redis连接耗尽,线程上锁的解决

    这篇文章主要介绍了redis scan命令导致redis连接耗尽,线程上锁的解决,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • mybatis如何实现继承映射

    mybatis如何实现继承映射

    这篇文章主要介绍了mybatis如何实现继承映射的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08

最新评论