스윙은 멀티스레딩, 제네릭 등과 다르게 주로 사용법에 있습니다.
다음은 주로 코드와 주석에 관한 내용이며, 말은 생략합니다.
(1) 기본 프레임워크
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, 차트는 그 자체로 채워진 그림입니다.
(2) 출력 텍스트
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!"라는 단어가 있습니다.
(3) 그래픽 인쇄
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픽셀의 원이 있습니다.
(4) 그래픽 컬러링
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接口的实例,并在画布上画出
이전 코드의 다른 부분은 변경하지 않고 다음 두 줄의 코드를 삽입합니다(삽입 2 또는 1줄 또는 4줄 코드의 원래 위치 중간에 3줄의 코드). 착색 효과를 얻으십시오.
출력 결과: 중앙에 파란색 직사각형이 있고 직사각형의 중심이 원점이고 반지름이 150픽셀이고 파란색 선이 있는 원입니다.
(5) 특수 글꼴
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" 텍스트가 있음 창의 바깥쪽 가장자리는 회색 직사각형으로 둘러싸여 있고 기준선에서 수평선으로 구분됩니다.
(6) 사진 추가
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) 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!

이 기사에서는 Java 프로젝트 관리, 구축 자동화 및 종속성 해상도에 Maven 및 Gradle을 사용하여 접근 방식과 최적화 전략을 비교합니다.

이 기사에서는 Maven 및 Gradle과 같은 도구를 사용하여 적절한 버전 및 종속성 관리로 사용자 정의 Java 라이브러리 (JAR Files)를 작성하고 사용하는 것에 대해 설명합니다.

이 기사는 카페인 및 구아바 캐시를 사용하여 자바에서 다단계 캐싱을 구현하여 응용 프로그램 성능을 향상시키는 것에 대해 설명합니다. 구성 및 퇴거 정책 관리 Best Pra와 함께 설정, 통합 및 성능 이점을 다룹니다.

이 기사는 캐싱 및 게으른 하중과 같은 고급 기능을 사용하여 객체 관계 매핑에 JPA를 사용하는 것에 대해 설명합니다. 잠재적 인 함정을 강조하면서 성능을 최적화하기위한 설정, 엔티티 매핑 및 모범 사례를 다룹니다. [159 문자]

Java의 클래스 로딩에는 부트 스트랩, 확장 및 응용 프로그램 클래스 로더가있는 계층 적 시스템을 사용하여 클래스로드, 링크 및 초기화 클래스가 포함됩니다. 학부모 위임 모델은 핵심 클래스가 먼저로드되어 사용자 정의 클래스 LOA에 영향을 미치도록합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

WebStorm Mac 버전
유용한 JavaScript 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)
