常用窗体

JFrame窗体

JFrame窗体是一个容器,是Swing程序中各个组件载体,也就是日常所见的对话框。在开发应用程序是可通过继承java.swing.JFrame类来创建窗体,在这个窗体中增加组件,同时为组件设置时间。

JFrame窗体类是具有“最大化”、“最小化”、“关闭”等基础按钮的对话框。

JFrame在程序中的语法格式:

JFrame jf = new JFrame(title);                    //实例化一个JFrame对象
Container container = jf.getContentPane();        //获取一个容器

jf:JFrame类的对象。
container:Container类的对象,可以使用JFrame对象调用getContentPane()方法来获取。

Swing组件的窗体通常与组件和容器有关,所以在Jrame对象创建完成后,需要调用getContentPane()方法将窗体转换为容器,然后在容器中添加组件或设置布局管理器。
通常来说,容器用来包含和显示组件,如果需要增加组件至容器中,可以使用来自Container类的add()方法进行设置:

container.add(new JButton("按钮"));  //添加JButton按钮组件至容器中

或是使用remove()方法将其删除:

container.remove(new JButton("按钮"));  //从容器中删除JButton按钮组件

示例:

/*
 * @author jiacy
 * @date 2020-2-10
 * @version V1.0
 * @创建Example1类,继承JFrame类为窗体类,在该类中创建标签组件,并添加到窗体组件中
 */

import java.awt.Color;
import java.awt.Container;  //导入awt包

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;//导入swing包

public class Example1 extends JFrame{                     //定义一个类继承JFrame类
	public void CreateJFrame(String title) {              //定义一个CreateJFrame()方法
		JFrame jf = new JFrame(title);                    //实例化一个JFrame对象
		JLabel jl = new JLabel("这是一个JFrame窗体");      //创建一个JLabel标签
		Container container = jf.getContentPane();        //获取一个容器
		jl.setHorizontalAlignment(SwingConstants.CENTER); //标签文字居中
		container.add(jl);                                //将标签添加至容器中
		jf.setVisible(true);                              //使窗体可视
		container.setBackground(Color.white);             //设置容器背景颜色为白色
		jf.setSize(200,150);                              //设置窗体大小为200*150
		jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//设置窗体关闭方式
		
	}

	public static void main(String[] args) {              //在主方法中调用CreateJFrame()方法
		new Example1().CreateJFrame("创建一个JFrame窗体");

	}

}

运行结果:

javaswing组件不显示 java中swing组件_javaswing组件不显示


对比程序与运算结果,可以看出:

采用了CreateJFrame(String title)构造方法,可以在实例化该JFrame对象(程序中的Example1对象)时创建一个不可见但是有标题的窗体(标题为“这是一个JFrame窗体”,在程序18-19行);

使用setVisible(true)方法设置窗体可见;

使用setSize(int x , int y)方法设置窗体大小,其中x和y分别代表了窗体的宽和高(对应程序25行)。

创建窗体后,需要增加窗体关闭方式,调用setDefaultCloseOperation()方法关闭窗体,这里采用了EXIT_ON_CLOSE(程序26行),代表退出应用程序默认窗口关闭,即通过右上角的“关闭”按钮。

JDialog窗体

JDialog也是对话框,它和JFrame的区别在于JDialog是从一个窗体中弹出另一个窗体,就好比从页面中点击按钮弹出一个对话框。JDialog和JFrame窗体形式基本相同,编码形式也很相似。

import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;

 class MyJDialog extends JDialog{         //创建新类继承JDialog类
	 public MyJDialog(MyFrame frame) {
	//实例化一个JDialog类对象,指定对话框的父窗体、窗体标题和类型
	super(frame,"第一个JDialog窗体",true);
	Container container = getContentPane();     //创建一个容器
	container.add(new JLabel("这是一个对话框")); //在容易中增加标签
	setBounds(120,120,100,100);                 //设置对话框大小
 }
public static class MyFrame extends JFrame{                //创建新类
	public static void main(String args[]) {
		new MyFrame();                                     //实例化MyJDialog类对象

	}
	public MyFrame() {
		Container container = getContentPane();                    //创建一个容器
		container.setLayout(null);
		JLabel jl = new JLabel("这是一个JFrame窗体");
		jl.setHorizontalAlignment(SwingConstants.CENTER);
		container.add(jl);
		JButton bl = new JButton("弹出对话框");                    //定义一个按钮
		bl.setBounds(10, 10, 100, 21);
		bl.addActionListener(new ActionListener(){ // 为按钮添加鼠标单击事件	
			public void actionPerformed(ActionEvent e){
				//使MyJDialog窗体可见
				new MyJDialog(MyFrame.this).setVisible(true);
			}

		});
		container.add(bl);                                         //添加按钮和组件
		container.add(bl);
		container.setBackground(Color.white);
		setSize(200, 200);                                          //设置窗体大小
		setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); //设置窗体关闭方式
		setVisible(true);                                           //设置弹出窗体可见	
		
		
	}
}
 }

运行结果:

javaswing组件不显示 java中swing组件_java_02

标签与图标

标签

标签由JLabel类定义,其父类为JComponent类。
标签可以显示一行只读文本、一个图像或带图像的文本,并不能产生任何类型时间,只能简单显示文本和图片,但可以使用标签的特性指定标签上文本的对齐方式。

public JLabel(String text,Icon icon,int aligment)//创建一个带文本、带图标的JLabel对象,并设置标签内容的水平对齐方式

图标

Swing中的图标可通过Icon接口来创建,可以再创建时给定图标大小、颜色等特性。
使用Icon接口时,须实现其中3个方法:
public int getIconHeight():获取图标的长;
public int getIconWidth():获取图标的宽;
public void painIcon(Component arg0,Graphics arg1,int arg2,int arg3):在指定坐标位置画图。

import java.awt.Component;
import java.awt.Container;
import java.awt.Graphics;

import javax.swing.Icon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;

public class DrawIcon implements Icon{      //实现Icon接口
	private int width;                      //声明图标的长
	private int height;                     //声明图标的宽
	public int getIconHeight() {            //实现getIconHeight()方法
		return this.height;
	}
	public int getIconWidth() {             //实现getIconWidth()方法
		return this.width;
	}
	public DrawIcon(int width,int height) { //定义构造方法
		this.width = width;
		this.height = height;
	}
	//实现paintIcon()方法
	public void paintIcon(Component arg0,Graphics arg1,int x ,int y) {
		arg1.fillOval(x, y, width, height);     //绘制一个圆形图标
	}

	public static void main(String[] args) {
		DrawIcon icon = new DrawIcon(15,15);
		//创建一个标签,并设置标签上文字在正中央
		JLabel j = new JLabel("测试",icon,SwingConstants.CENTER);
		JFrame jf = new JFrame();                                       //创建一个JFrame窗口
		Container c = jf.getContentPane();
		c.add(j);
		jf.setSize(100,100);
		jf.setVisible(true);
		jf.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

	}

}

实现结果:

javaswing组件不显示 java中swing组件_javaswing组件不显示_03


在实现paintIcon()方法中使用Graphics类中的方法绘制一个圆形图标,其余实现的方法为返回图标的长和宽。

除了自己绘制图标外,还可以使用某个特定图片创建,利用javax.swing.ImageIcon类根据现有突变创建图标,可支持多种图片格式。只要在程序中增加获取图片所在的URL即可。

URL url = MyImageIcon.class.getResource("imageButton.jpg")

☆java.lang.Class类中的getResource()方法可以获取资源文件的URL路径。