与多线程、泛型等不同,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教程_java图形化Swing教程(一)相关推荐

  1. java图形界面文字输出_java图形化Swing教程(一)

    与多线程.泛型等不同,Swing主要在于使用. 下面主要放代码和注释,少说话. (一)基本框架package Swing;import java.awt.*;import javax.swing.*; ...

  2. java计算器布局设计_Java图形化界面设计——布局管理器之GridLayout(网格布局) 之计算器...

    代码如下: import java.awt.*; import javax.swing.*; public class GridFrame extends JFrame { // 定义字符串数组,为按 ...

  3. java实现混合运算_java图形化界面实现简单混合运算计算器

    写了好几天了终于写完了这个四则运算计算器,总代码放在后面 截图如下: 首先是布局都比较简单,最上面的一个框是总的输出框, 第二个框是每次输入的数字显示在框内, 对于每一个按钮都增加监听器, 对于数字按 ...

  4. java 删除图形界面_Java图形化界面报错?

    import java.awt.*; import java.awt.event.*; import javax.swing.*; import 测试新界面.Panel.DeletePlayer; i ...

  5. java图形界面美化_Java图形化编程美化

    1.去掉原来的界面的装饰,改用自己装饰: 先看看效果,如下图 如何实现: 1.去掉原来的windows的装饰: this.setSize(340, 256); this.setUndecorated( ...

  6. Oracle使用教程——05Oracle图形化界面的使用

    Oracle使用教程--05Oracle图形化界面的使用 一.安装工具 二.使用 1.建立连接 2.PL/SQL讲解 2.1变量声明 2.2if语句讲解 2.3循环讲解 2.4光标使用讲解 2.5异常 ...

  7. 米思齐(Mixly)图形化系列教程(六)-for循环

    目录 For执行过程 省略 省略'循环变量赋值' 省略'循环条件' 省略"循环变量增量" FOR循环使用举例 遍历数组 顺序输出数据 指定程序重复执行次数 死循环 求和 教程导航 ...

  8. 米思齐(Mixly)图形化系列教程(七)-while与do……while

    目录 while循环的执行过程 while循环流程 do--while循环流程 举例 break与continue 教程导航 联系我们 while循环只要循环条件为真就一直执行循环体 while循环的 ...

  9. 米思齐(Mixly)图形化系列教程(五)-if……else……与逻辑运算

    目录 比较运算 逻辑运算符 if esle 说明 例子 if程序的嵌套 例子 教程导航 联系我们 比较运算和逻辑运算返回两种结果,条件成立(真true)与不成立(假false) 比较运算 下表显示了支 ...

最新文章

  1. Typora 收费,WTF? 还是需要支持下
  2. js小效果-简易计算器
  3. FastDFS+Nginx实现文件服务器(转载)
  4. java精确除法计算,四舍五入 Java问题通用解决代码
  5. 十分钟就能回顾Spring常问的知识点,带你突击面试没问题!
  6. mysql timstamp_DB_MySQL_日期类型讲解_DATETIME_DATE_TIMESTAMP
  7. 如何去掉jQWidgets中TreeGrid和Grid右下角的链接
  8. premature end of file错误
  9. 用随机整数填充缺失值_输入一个整数值并在C中用零填充进行打印
  10. [linux 命令笔记] kill
  11. quartz集群重复调度的解决
  12. 梦见有人追我我拼命逃
  13. 宝塔搭建javaweb_宝塔面板配置及部署javaweb教程(全网最全)
  14. FoveaBox(Beyond Anchor-based Object Detector) 学习笔记
  15. 学硕停招,985高校这些专业开始只留专硕
  16. 两分钟研究透idea中Git文件的颜色,绿红蓝白灰
  17. Python绘制简单的曲线图·
  18. 啃书:《利用python进行数据分析》第六章——数据加载(三)
  19. 无盘启动服务器,无盘启动 服务器设置教程
  20. 2018年末要练出马甲线,此博客为证明

热门文章

  1. Android MarginLeft与MarginStart的区别
  2. 新手必备pr 2021快速入门教程「六」时间轴面板的认识及使用功能
  3. n平方的求和公式_求∑n^2的求和公式,谢谢
  4. 2023中国玉米深加工 不断地发展与创新
  5. 全国高中计算机大赛,第十九届全国中小学信息技术创新与实践大赛
  6. 认识ETOMnbsp;(转贴)
  7. python之路-day33-线程相关1
  8. 搭建Vue脚手架工程
  9. RocksDB Java API 操作示例
  10. java web 找回密码_JavaWeb利用邮箱帮用户找回密码