与多线程、泛型等不同,Swing主要在于使用。

以下主要放代码和凝视。少说话。

(一)基本框架

package Swing;

import java.awt.*;
import javax.swing.*; /**
*
* @author QuinnNorris
* 基本框架
*/
public class FrameTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub // 开启一个线程,全部的Swing组件必须由事件分派线程进行配置,线程将鼠标点击和按键控制转移到用户接口组件。
EventQueue.invokeLater(new Runnable() {
// 匿名内部类。是一个Runnable接口的实例,实现了run方法
public void run() { SimpleFrame frame = new SimpleFrame();
// 创建以下自定义的SimpleFrame类对象。以便于调用构造器方法 frame.setExtendedState(Frame.MAXIMIZED_BOTH);
// 将窗体最大化
// 其它可选属性:Frame.NORMAL ICONIFIED MAXIMIZED_HORIZ MAXIMIZED_VERT
// MAXIMIZED_BOTH frame.setTitle("Christmas");
// 设置窗体标题 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 选择当用户关闭框架时进行的操作 。在有些时候须要将窗体隐藏,不能直接退出须要用到这种方法 frame.setVisible(true);
// 将窗体可见化,这样以便用户在第一次看见窗体之前我们能够向当中加入内容
} });
}
// main结束时,程序并没有结束,而是结束了主线程。知道全部框架关闭或者调用了 System.exit事才终止程序
} class SimpleFrame extends JFrame {
public SimpleFrame() { Toolkit kit = Toolkit.getDefaultToolkit();
// 改动窗体在屏幕上面的位置。改变窗体大小
// Toolkit类包含非常多与本地窗体交互的方法 Dimension screenSize = kit.getScreenSize();
// Toolkit的获取频幕大小的方法返回一个Dimension的类对象 setSize((int) (screenSize.getWidth()), (int) (screenSize.getHeight()));
// setBounds(0,0,(int)(screenSize.getWidth()),(int)(screenSize.getHeight()));
// 定义窗体的位置和大小
// setLocation(0,0); 定位窗体距离左上角的位置
// setLocationByPlatform(true); 让窗体系统控制窗体位置,距离上一个窗体非常小的偏移量 // 用图片来替换窗体图标
Image img = new ImageIcon("D:/icon.png").getImage();
setIconImage(img); }
}

输出结果:一个充满整个屏幕的框体。标题栏名字叫做Christmas,图表是自己填充的图片。

(二)输出文字

package Swing;

import java.awt.*;
import javax.swing.*; /**
*
* @author QuinnNorris
* 输出文字
*/
public class HelloWorld { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub // 开启一个线程,全部的Swing组件必须由事件分派线程进行配置,线程将鼠标点击和按键控制转移到用户接口组件
EventQueue.invokeLater(new Runnable() {
// 匿名内部类。是一个Runnable接口的实例,实现了run方法
public void run() { JFrame frame = new HelloWorldFrame();
// HelloworldFrame在以下定义,继承了JFrame,使用当中的构造器方法 frame.setTitle("HelloWrold");
// 设置标题 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 选择当用户关闭框架时进行的操作 。在有些时候须要将窗体隐藏。不能直接退出须要用到这种方法 frame.setVisible(true);
// 将窗体可见化。这样以便用户在第一次看见窗体之前我们能够向当中加入内容
}
}); } } // 编写继承了JFrame的类,我们的工作在这里进行
class HelloWorldFrame extends JFrame {
public HelloWorldFrame() { add(new HelloWorldComponent());
//向当中加入一个实例化的实现JComponent类的子类 pack();
//调用框架组件的首选大小,或者我们能够用SetSize方法来替换它
}
} class HelloWorldComponent extends JComponent {
public static final int MESSAGE_X = 75;
public static final int MESSAGE_Y = 100; private static final int DEFAULT_WIDTH = 300;
private static final int DEFAULT_HEIGHT = 200; /**
* 我们覆盖了这个以用来书写内容
*
* @param g
* Graphics对象保存着用于绘制图像和文本的设置
*/
public void paintComponent(Graphics g) {
g.drawString("Hello World!", MESSAGE_X, MESSAGE_Y);
// 參数:书写内容。字符串中第一个字符位于从左向右75像素,字符串中第一个字符从上向下100像素
} /**
* 我们覆盖了这种方法来表示出这个类的组件的大小
*
* @return 返回这个类的组件本身应该有多大
*/
public Dimension getPreferredSize() {
return new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT);
// 返回一个Dimension对象,表示这个组件的大小
}
}

输出结果:位于左上角的名字叫做HelloWrold的小窗体,在窗体中部有“Hello World!”字样。

(三)打印图形

package Swing;

import java.awt.EventQueue;

import javax.swing.*;

import java.awt.*;
import java.awt.geom.*; /**
*
* @author QuinnNorris
* 打印图形
*/
public class DrawTest { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub // 开启一个线程。全部的Swing组件必须由事件分派线程进行配置,线程将鼠标点击和按键控制转移到用户接口组件。
EventQueue.invokeLater(new Runnable()
{
// 匿名内部类,是一个Runnable接口的实例。实现了run方法
public void run(){ JFrame frame = new DrawFrame();
// 创建以下自定义的SimpleFrame类对象。以便于调用构造器方法 frame.setTitle("DrawTest");
// 设置标题 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 选择当用户关闭框架的时候进行的操作 。在有些时候须要将窗体隐藏。不能直接退出须要用到这种方法 frame.setVisible(true);
// 将窗体可见化。这样以便用户在第一次看见窗体之前我们能够向当中加入内容
}
});
} } class DrawFrame extends JFrame
{
public DrawFrame(){ add(new DrawComponent());
//向当中加入一个实例化的实现JComponent类的子类 pack();
//调用框架组件的首选大小,或者我们能够用SetSize方法来替换它
}
} class DrawComponent extends JComponent
{
private static final int DEFAULT_WIDTH = 400;
private static final int DEFAULT_HEIGHT = 400; /**
* 我们覆盖了这个以用来打印图形
*
* @param g
* Graphics对象是我们须要用的Graphics2D的父类
*/
public void paintComponent(Graphics g){ Graphics2D g2 = (Graphics2D)g;
//实例化Graphics2D这个类的对象,他是參数Graphics2D的一个子类 double leftX = 100;
double topY = 100;
double width = 200;
double height = 150;
//我们设置矩形的四个属性 Rectangle2D rect = new Rectangle2D.Double(leftX,topY,width,height);
//创建一个Rectangle2D的对象,这个对象继承了Sharp接口
//Double是当中的一个静态内部类。当我们初始化时须要在Double中设置參数 g2.draw(rect);
//传入一个实现Sharp接口的实例,并在画布上画出 Ellipse2D ellipse = new Ellipse2D.Double();
//创建一个椭圆的实例 ellipse.setFrame(rect);
//椭圆和矩形类是兄弟关系,由于他们有着同样的边界推断方式
//这里我们直接用rect来对椭圆形进行描写叙述(通过椭圆的外接矩形) g2.draw(ellipse);
//传入一个实现Sharp接口的实例,并在画布上画出 g2.draw(new Line2D.Double(leftX,topY,leftX+width,topY+height));
//在画布上画出一条直线 double centerX = rect.getCenterX();
double centerY = rect.getCenterY();
double radius = 150;
//定义圆心坐标和半径 Ellipse2D circle = new Ellipse2D.Double();
//创建一个圆的实例
circle.setFrameFromCenter(centerX, centerY, centerX+radius, centerY+radius);
//设置坐标和半径
g2.draw(circle);
//在画布上画出一个圆
} /**
* 我们覆盖了这种方法来表示出这个类的组件的大小
*
* @return 返回这个类的组件本身应该有多大
*/
public Dimension getPreferredSize(){
return new Dimension(DEFAULT_WIDTH,DEFAULT_HEIGHT);
// 返回一个Dimension对象,表示这个组件的大小
}
}

输出结果:左上角的窗体中有一个椭圆,外面有一个外界矩形,有一条从矩形左上角到右下角的直线,以这个矩形中心为原点有一个半径为150像素的圆。

(四)图形上色

Rectangle2D rect = new Rectangle2D.Double(leftX,topY,width,height);
//创建一个Rectangle2D的对象。这个对象继承了Sharp接口
//Double是当中的一个静态内部类,当我们初始化时须要在Double中设置參数 g2.setColor(Color.BLUE);
//为g2对象设置一种填充颜色,会影响线条颜色 g2.fill(rect);
//将我们选择的颜色填充到rect表示的封闭图形中 g2.draw(rect);
//传入一个实现Sharp接口的实例,并在画布上画出

在上一个代码其它部分不改变的情况下。插入这样两行代码(在1。4行代码的原位置中间插入2。3行代码)。

得到上色效果。

输出结果:中间为蓝色矩形,以矩形中心为原点。150像素为半径有个蓝色线条的圆形。

(五)特殊字体

package Swing;

import javax.swing.*;
import java.awt.*;
import java.awt.font.*;
import java.awt.geom.*; /**
*
* @author QuinnNorris 特殊字体
*/
public class FontTest { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub // 开启一个线程,全部的Swing组件必须由事件分派线程进行配置,线程将鼠标点击和按键控制转移到用户接口组件。
EventQueue.invokeLater(new Runnable() {
// 匿名内部类。是一个Runnable接口的实例。实现了run方法
public void run() {
JFrame frame = new FontFrame();
// 创建以下自定义的SimpleFrame类对象。以便于调用构造器方法 frame.setTitle("FontTest");
// 设置标题 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 选择当用户关闭框架的时候进行的操作 ,在有些时候须要将窗体隐藏,不能直接退出须要用到这种方法 frame.setVisible(true);
// 将窗体可见化,这样以便用户在第一次看见窗体之前我们能够向当中加入内容
}
});
} } class FontFrame extends JFrame {
public FontFrame() {
add(new FontComponent());
// 向当中加入一个实例化的实现JComponent类的子类 pack();
// 调用框架组件的首选大小。或者我们能够用SetSize方法来替换它
}
} class FontComponent extends JComponent {
private static final int DEFAULT_WIDTH = 300;
private static final int DEFAULT_HEIGHT = 200; /**
* 我们覆盖了这个以用来做一些工作
*
* @param g
* Graphics对象是我们须要用的Graphics2D的父类
*/
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
// 实例化Graphics2D这个类的对象,他是參数Graphics2D的一个子类 String message = "Hello World!";
// 写出我们要操作的文字 Font f = new Font("Dialog", Font.BOLD, 36);
// 创建一个字体类型,參数包含字体族,风格类型,大小
// 也能够通过特殊的方法。调用载入得到本地的字体包 g2.setFont(f);
// 将f设置在g2之中 FontRenderContext context = g2.getFontRenderContext();
// 通过调用方法,得到屏幕设备字体属性的描写叙述对象 Rectangle2D bounds = f.getStringBounds(message, context);
// getStringBounds方法返回一个包围着字符串的矩形 double x = (DEFAULT_WIDTH - bounds.getWidth()) / 2;
// bounds.getWidth方法能够获得字符串的宽度 double y = (DEFAULT_HEIGHT - bounds.getHeight()) / 2;
// bounds.getHeight方法能够获得字符串的高度 double ascent = -bounds.getY();
// 获得字体的上坡度 double baseY = y + ascent;
// 文字的基线位置 g2.drawString(message, (int) x, (int) y);
// 设置字符串位置 g2.setPaint(Color.LIGHT_GRAY);
// 设置线条颜色为亮灰色 g2.draw(new Line2D.Double(x, baseY, x + bounds.getWidth(), baseY));
// 在文字的基线上画下一条横线 Rectangle2D rect = new Rectangle2D.Double(x, y, bounds.getWidth(),
bounds.getHeight()); g2.draw(rect);
} /**
* 我们覆盖了这种方法来表示出这个类的组件的大小
*
* @return 返回这个类的组件本身应该有多大
*/
public Dimension getPreferredSize() {
return new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT);
// 返回一个Dimension对象,表示这个组件的大小
}
}

输出结果:窗体正中间有文字“Hello World”。外围被一个灰色矩形包含,在基线的地方有一条横线切割。

(六)加入图片

package Swing;

import javax.swing.*;
import java.awt.*; /**
*
* @author QuinnNorris 加入图片
*/
public class ImageTest { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub // 开启一个线程。全部的Swing组件必须由事件分派线程进行配置,线程将鼠标点击和按键控制转移到用户接口组件。
EventQueue.invokeLater(new Runnable() {
// 匿名内部类,是一个Runnable接口的实例。实现了run方法
public void run() {
JFrame frame = new ImageFrame();
// 创建以下自定义的SimpleFrame类对象,以便于调用构造器方法 frame.setTitle("ImageTest");
// 设置标题 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 选择当用户关闭框架的时候进行的操作 ,在有些时候须要将窗体隐藏,不能直接退出须要用到这种方法 frame.setVisible(true);
// 将窗体可见化。这样以便用户在第一次看见窗体之前我们能够向当中加入内容
}
});
} } class ImageFrame extends JFrame {
public ImageFrame() {
add(new ImageComponent());
// 向当中加入一个实例化的实现JComponent类的子类 pack();
// 调用框架组件的首选大小。或者我们能够用SetSize方法来替换它
}
} class ImageComponent extends JComponent { private static final int DEFAULT_WIDTH = 300;
private static final int DEFAULT_HEIGHT = 200; private Image image; /**
* ImageComponent的构造函数,用来实例化图片
*/
public ImageComponent(){
image = new ImageIcon("D:/image.jpg").getImage();
//通过路径得到图片
} /**
* 我们覆盖了这个以用来做一些工作
*
* @param g
*
*/
public void paintComponent(Graphics g) {
if(image == null ) return;
//假设图片不对,则直接返回避免错误发生 g.drawImage(image, 0,0,null);
//在画布上给出图片
} /**
* 我们覆盖了这种方法来表示出这个类的组件的大小
*
* @return 返回这个类的组件本身应该有多大
*/
public Dimension getPreferredSize() {
return new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT);
// 返回一个Dimension对象。表示这个组件的大小
}
}

输出结果:在画布以左上角为開始放置你加入的图片。

java图形化Swing教程(一)的更多相关文章

  1. 转:二十七、Java图形化界面设计——容器(JFrame)

    转:http://blog.csdn.net/liujun13579/article/details/7756729 二十七.Java图形化界面设计——容器(JFrame) 程序是为了方便用户使用的, ...

  2. 三十二、Java图形化界面设计——布局管理器之CardLayout(卡片布局)

    摘自 http://blog.csdn.net/liujun13579/article/details/7773945 三十二.Java图形化界面设计--布局管理器之CardLayout(卡片布局) ...

  3. 二十七、Java图形化界面设计——容器(JFrame)

    摘自http://blog.csdn.net/liujun13579/article/details/7756729 二十七.Java图形化界面设计--容器(JFrame) 程序是为了方便用户使用的, ...

  4. 三十三、Java图形化界面设计——布局管理器之null布局(空布局)

    摘自http://blog.csdn.net/liujun13579/article/details/7774267 三十三.Java图形化界面设计--布局管理器之null布局(空布局) 一般容器都有 ...

  5. Java图形化界面设计——中间容器(Jpanel)

    1.  将组件添加到JFrame中 方式之一: frame.getContentPane().add(childComponent) 用getContentPane()方法获得JFrame的内容面板, ...

  6. Java图形化界面设计——容器(JFrame)

    Java图形化界面设计——容器(JFrame) 程序是为了方便用户使用的,因此实现图形化界面的程序编写是所有编程语言发展的必然趋势,在命令提示符下运行的程序可以让我们了解java程序的基本知识体系结构 ...

  7. Java 图形化界面设计(GUI)实战练习(代码)

    关于Java图形化界面设计,基础知识网上可搜,下面简单介绍一下重点概念,然后就由浅入深代码实例. 程序是为了方便用户使用的,Java引入图形化界面编程. 1.JFrame 是容器类 2.AWT 是抽象 ...

  8. 02 Java图形化界面设计——中间容器(Jpanel)

    上一篇讲解了Jframe顶层容器,例子中生成了一个空的窗体,在实际编程过程中,一般很少将文本框.按钮等组件直接放在顶层容器中进行布局,大多数时候是通过布局管理器结合中间容器对组件进行布局设置. 1.  ...

  9. 01 Java图形化界面设计——容器(JFrame)

    程序是为了方便用户使用的,因此实现图形化界面的程序编写是所有编程语言发展的必然趋势,在命令提示符下运行的程序可以让我们了解java程序的基本知识体系结构,现在就进入java图形化界面编程. 一.Jav ...

随机推荐

  1. 【HBase】Rowkey设计【转】

    本章将深入介绍由HBase的存储架构在设计上带来的影响.如何设计表.row key.column等等,尽可能地使用到HBase存储上的优势. Key设计 HBase有两个基础的主键结构:row key ...

  2. 转载:Jmeter教程索引

    摘自: 阳光温暖了心情 的 http://www.cnblogs.com/yangxia-test/category/431240.html 1 JMeter学习(一)工具简单介绍 2 JMeter学 ...

  3. HttpClient 教程 (六)

    第六章 高级主题 6.1 自定义客户端连接 在特定条件下,也许需要来定制HTTP报文通过线路传递,越过了可能使用的HTTP参数来处理非标准不兼容行为的方式.比如,对于Web爬虫,它可能需要强制Http ...

  4. Java web项目中java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

    原来是tomcat找不到MYSQL JAR包的问题.后来又把mysql-connector-java-5.1.7-bin.jar导入到tomcat的lib目录下面就ok了,嘿…… 在java项目中,只 ...

  5. c++之——template模板函数

    为了实现与数据类型无关的编程,模板应运而生: #include<iostream> #include<string.h> using namespace std; templa ...

  6. 通过google浏览器的开发者工具修改cookie值

    打开一个页面F12,然后再刷新下.点到如下图位置刚可以添加或重设cookie的值.修改cookie的值时,需要注意要清除下cookie.不然修改的cookie不生效.

  7. egret升级经验记录

    1.StageDelegate.setDesignSize ; 直接去掉,在3.x里是直接在index.html里设置如: data-content-width="960" dat ...

  8. 【Unity/Kinect】使用KinectManager的一般流程

    想要从Kinect读取到数据,然后使用数据,通常是以下流程: using UnityEngine; using System.Collections; /// <summary> /// ...

  9. Cygwin镜像使用帮助

    Cygwin镜像使用帮助 收录架构 x86 x86_64 收录版本 所有版本 更新时间 每12小时更新一次   使用说明 选择从互联网安装, 在"User URL"处输入以下地址 ...

  10. python中copy 与 '=' 的区别

    当你a=1000的时候a指向一个新的类,内容为1000,而b仍然指向原来指向的内容,因为你没有叫它指向其他内容.你使用=符号,使得a和b指向同一个内容,而copy则是将b的内容复制后让c指向这个拷贝的 ...