java  Swing基础教程之图形化实例代码

java  Swing基础教程之图形化实例代码

与多线程、泛型等不同,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对象,表示这个组件的大小
  }
}

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

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • Java Swing实现的定制TextField功能示例

    本文实例讲述了Java Swing实现的定制TextField功能.分享给大家供大家参考,具体如下: 先来看看运行效果: 具体代码如下: package themedemo; import java.awt.BasicStroke; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Graphics2D; import java.awt.GridLayout; import java.awt.Insets;

  • java swing 实现加载自定义的字体

    目录 java swing 加载自定义的字体 Java swing更改全局字体 java swing 加载自定义的字体 在实际开发中, 我们需要把字体的名字和字体做一一对应的映射关系, 然后需要通过可配置的方式加载自定义的字体. 所以就有了这个需求, 我们来实现. 首先我们定义一个自定义加载子类的工具类 import java.awt.Font; import java.io.File; import java.io.FileInputStream; import java.io.IOExcep

  • Java Swing中的文本框(JTextField)与文本区(JTextArea)使用实例

    一:JTextField的(文本框)使用: JTextField 是一个轻量级组件,它允许编辑单行文本. 1.JTextField的常用构造方法: JTextField() 构造一个新的 TextField. JTextField(int columns) 构造一个具有指定列数的新的空 TextField. JTextField(String text) 构造一个用指定文本初始化的新TextField. JTextField(String text, int columns) 构造一个用指定文本

  • java Swing基础教程之图形化实例代码

    java  Swing基础教程之图形化实例代码 与多线程.泛型等不同,Swing主要在于使用. 下面主要放代码和注释,少说话. (一)基本框架 package Swing; import java.awt.*; import javax.swing.*; /** * * @author QuinnNorris * 基本框架 */ public class FrameTest { /** * @param args */ public static void main(String[] args)

  • java  Swing基础教程之图形化实例代码

    java  Swing基础教程之图形化实例代码 与多线程.泛型等不同,Swing主要在于使用. 下面主要放代码和注释,少说话. (一)基本框架 package Swing; import java.awt.*; import javax.swing.*; /** * * @author QuinnNorris * 基本框架 */ public class FrameTest { /** * @param args */ public static void main(String[] args)

  • C++ 基础教程之虚函数实例代码详解

    虚函数的定义 虚函数:就是在基类的成员函数前加关键字virtual(即被virtual关键字修饰的成员函数),并在一个或多个派生类中被重新定义的成员函数:虚函数:就是在编译的时候不确定要调用哪个函数,而是动态决定将要调用哪个函数.它的作用就是为了能让这个函数在它的子类里面可以被重载,这样的话,编译器就可以使用后期绑定来达到多态了,也就是用基类的指针来调用子类的这个函数:虚函数的作用:在于用专业术语来解释就是实现多态性,多态性是将接口与实现进行分离,通过指向派生类的基类指针或引用,访问派生类中同名

  • Eclipse+Java+Swing实现学生成绩管理系统的实例代码

    一.系统介绍 本系统实现了用户登录,实现了对学生成绩的增删改查,实现了用户修改密码功能,采用MD5加密算法,数据库使用Mysql8.0.13,界面良好. 二.系统展示 1.登录页 2.主页面 3.查询学生成绩 4.修改学生成绩 5.添加学生成绩 6.修改系统密码 三.系统实现 Student.java package com.sjsq.model; import java.util.ArrayList; import java.util.List; /** * 学生实体类 * @author s

  • JAVA基础之控制台输入输出的实例代码

    ---恢复内容开始--- 输入需要用scanner机制 代码: 启用scanner机制 Scanner input = new Scanner(System.in); //String x= input.next(); //String x = input.nextLine(); //int num = input.nextInt(); //double num = input.nextDouble(); 输出用需要用System的out方法 代码: System.out.println();

  • Python基础之tkinter图形化界面学习

    一.基础内容 import tkinter as tk from PIL import Image,ImageTk def my(): pwin.destroy() win.deiconify() win = tk.Tk() #win.geometry('320x240+100+50') #长320宽240 右100,下50 win['width']=320 #可以用win.keys()查看哪些可以这样写 win['height']=240 win.title('tkinter图形化专题学习')

  • Golang基础教程之字符串string实例详解

    目录 1. string的定义 2.string不可变 3.使用string给另一个string赋值 4.string重新赋值 补充:字符串拼接 总结 1. string的定义 Golang中的string的定义在reflect包下的value.go中,定义如下: StringHeader 是字符串的运行时表示,其中包含了两个字段,分别是指向数据数组的指针和数组的长度. // StringHeader is the runtime representation of a string. // I

  • Java编程实现轨迹压缩算法开放窗口实例代码

    轨迹压缩算法 场景描述 给定一个GPS数据记录文件,每条记录包含经度和维度两个坐标字段,根据距离阈值压缩记录,将过滤后的所有记录的经纬度坐标构成一条轨迹 算法描述 这种算法的用处还是相当广泛的. 轨迹压缩算法分为两大类,分别是无损压缩和有损压缩,无损压缩算法主要包括哈夫曼编码,有损压缩算法又分为批处理方式和在线数据压缩方式,其中批处理方式又包括DP(Douglas-Peucker)算法.TD-TR(Top-Down Time-Ratio)算法和Bellman算法,在线数据压缩方式又包括滑动窗口.

  • Java实现二维码功能的实例代码

    最近突然想写一些文章,所以就陆陆续续的编写一些自我感觉有用的并且大家也可能用到的一些技术代码.方便互相学习交流. 今天这篇文章,主要是利用Java实现二维码: 在写代码之前先讲一下整体思路,以方便更好更快捷的实现功能. (1).首先要想实现二维码功能需要导入com.google.zxing的核心jar包,我这里导入的是core-3.2.1.jar; (2).所谓二维码莫过于把需要的内容放入一张图片中,所以这里首先是创建一张带有参数内容的图片,方法如下: private static Buffer

  • Android MPAndroidChart开源库图表之折线图的实例代码

    本文讲述了Android MPAndroidChart开源库图表之折线图的实例代码.分享给大家供大家参考,具体如下: 承接上一篇文章,请参考Android HelloChart开源库图表之折线图的实例代码 1. 将mpandroidchartlibrary-2-0-8.jar包copy到项目的libs中: 2. 定义xml文件. 3.  主要Java逻辑代码如下,注释已经都添加上了. package com.example.mpandroidlinechart; import java.util

随机推荐