首页 > 编程语言 >java-swing画图

java-swing画图

时间:2024-09-02 13:36:20浏览次数:10  
标签:java int offsetx offsety 画图 rgbs1 swing height public

MyRect.java

package Main;

public class MyRect {
	public int x = 0;
	public int y = 0;
	public MyRgb rgb = new MyRgb();
	long createtime = 0;
	
	public MyRect() {
		
	}
	public MyRect(int mx, int my, MyRgb myrgb, long time) {
		x = mx;
		y = my;
		rgb = myrgb;
		createtime = time;
	}
}

  MyRgb.java

package Main;

public class MyRect {
    public int x = 0;
    public int y = 0;
    public MyRgb rgb = new MyRgb();
    long createtime = 0;
    
    public MyRect() {
        
    }
    public MyRect(int mx, int my, MyRgb myrgb, long time) {
        x = mx;
        y = my;
        rgb = myrgb;
        createtime = time;
    }
}

 

GraphicsTest.java

package Main;

import java.awt.*;
import javax.swing.*;

import java.awt.image.BufferedImage;
import java.awt.Graphics;
import java.awt.Toolkit;
import java.awt.Dimension;
import java.awt.Color;
import java.awt.Graphics2D;

import java.awt.event.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import java.awt.im.InputContext;

import java.util.Random;
import java.util.ArrayList;
import java.util.Locale;

import Main.MyRgb;

public class GraphicsTest extends JPanel {
    int keyoffsetx = 0;
    int keyoffsety = 0;
    ArrayList<MyRgb> rgbList = new ArrayList<MyRgb>();
    
    public GraphicsTest() {
        MyRgb rgbs1 = new MyRgb();
        for(int i = 0; i < 20; i++) {
            rgbs1 = getRandRgb();
            rgbList.add(rgbs1);
        }
        
    }
    
    public void keyPressed(String key) {
        System.out.println("keyPressed: " + key);
        if(key.equals("A")) {
            keyoffsetx -= 5;
        }
        
        if(key.equals("D")) {
            keyoffsetx += 5;
        }
        
        if(key.equals("W")) {
            keyoffsety -= 5;
        }
        if(key.equals("S")) {
            keyoffsety += 5;
        }
        this.updateUI();
    }
    
    public int randInt(int min, int max) {
        Random rand1 = new Random();
        int randomNum = rand1.nextInt((max - min) + 1) + min;
        return randomNum;
    }
    
    public Color getColorWithRgbs(MyRgb rgbs) {
        return new Color(rgbs.r, rgbs.g, rgbs.b);
    }
    
    public MyRgb getRandRgb() {
        MyRgb res = new MyRgb(randInt(1,255), randInt(1,255), randInt(1,255));
        
        return res;
    }
    
    public MyRgb getReverseRgb(MyRgb rgbs) {
        MyRgb res = new MyRgb();
        res.r = 255 - rgbs.r;
        res.g = 255 - rgbs.g;
        res.b = 255 - rgbs.b;
        
        return res;
    }
    
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        
        int panel_width = getWidth();
        int panel_height = getHeight();
        System.out.println("画布宽度:"+panel_width);
        System.out.println("画布高度:"+panel_height);
        System.out.println();
        
        //清除指定矩形区域的像素
        //void clearRect(int x, int y, int width, int height)
        //g.clearRect(0, 0, panel_width, panel_height);
        
        //设置画板背景颜色
        setBackground(new Color(128, 0, 128));
        
        //设置画板背景图片
        Toolkit toolkit = Toolkit.getDefaultToolkit();
        Image image = toolkit.getImage("bg001.jpeg");
        //void drawImage(Image img, int x, int y, ImageObserver observer)
        //g.drawImage(image, 0, 0, panel_width, panel_height, this);
        
        MyRgb rgbs1 = new MyRgb();
        MyRgb rgbs2 = new MyRgb();
        
        int rgbindex = 0;
        int offsetx = (int)((panel_width-330)/2);
        int offsety = (int)((panel_height-240)/2);
        offsetx = offsetx + keyoffsetx;
        offsety = offsety + keyoffsety;
        
        //矩形
        rgbs1 = rgbList.get(rgbindex);rgbindex++;
        rgbs2 = getReverseRgb(rgbs1);
        g.setColor(getColorWithRgbs(rgbs1));
        //void drawRect(int x, int y, int width, int height)
        g.drawRect(offsetx+5, offsety+5, 50, 50);
        g.setColor(getColorWithRgbs(rgbs2));
        g.drawString("矩形", offsetx+20, offsety+30);
        
        //填充矩形
        rgbs1 = rgbList.get(rgbindex);rgbindex++;
        rgbs2 = getReverseRgb(rgbs1);
        g.setColor(getColorWithRgbs(rgbs1));
        //void fillRect(int x, int y, int width, int height)
        g.fillRect(offsetx+5, offsety+65, 50, 50);
        g.setColor(getColorWithRgbs(rgbs2));
        g.drawString("填矩", offsetx+20, offsety+90);
        
        //绘制一个圆角矩形
        rgbs1 = rgbList.get(rgbindex);rgbindex++;
        rgbs2 = getReverseRgb(rgbs1);
        g.setColor(getColorWithRgbs(rgbs1));
        //void drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)
        g.drawRoundRect(offsetx+5, offsety+125, 50, 50, 8, 8);
        g.setColor(getColorWithRgbs(rgbs2));
        g.drawString("圆矩", offsetx+20, offsety+155);
        
        //填充一个圆角矩形
        rgbs1 = rgbList.get(rgbindex);rgbindex++;
        rgbs2 = getReverseRgb(rgbs1);
        g.setColor(getColorWithRgbs(rgbs1));
        //void fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)
        g.fillRoundRect(offsetx+5, offsety+185, 50, 50, 15, 15);
        g.setColor(getColorWithRgbs(rgbs2));
        g.drawString("圆角", offsetx+20, offsety+220);
 
        //椭圆
        rgbs1 = rgbList.get(rgbindex);rgbindex++;
        rgbs2 = getReverseRgb(rgbs1);
        g.setColor(getColorWithRgbs(rgbs1));
        //void drawOval(int x, int y, int width, int height)
        g.drawOval(offsetx+65, offsety+5, 50, 50);
        g.setColor(getColorWithRgbs(rgbs2));
        g.drawString("椭圆", offsetx+77, offsety+32);
        
        //填充椭圆
        rgbs1 = rgbList.get(rgbindex);rgbindex++;
        rgbs2 = getReverseRgb(rgbs1);
        g.setColor(getColorWithRgbs(rgbs1));
        //void fillOval(int x, int y, int width, int height)
        g.fillOval(offsetx+65, offsety+65, 50, 60);
        g.setColor(getColorWithRgbs(rgbs2));
        g.drawString("填椭", offsetx+77, offsety+97);
 
        //线
        rgbs1 = rgbList.get(rgbindex);rgbindex++;
        rgbs2 = getReverseRgb(rgbs1);
        g.setColor(getColorWithRgbs(rgbs1));
        //void drawLine(int x1, int y1, int x2, int y2)
        g.drawLine(offsetx+75, offsety+185, offsetx+145, offsety+205);
        g.setColor(getColorWithRgbs(rgbs2));
        g.drawString("线", offsetx+97, offsety+185);
 
        //圆弧
        rgbs1 = rgbList.get(rgbindex);rgbindex++;
        rgbs2 = getReverseRgb(rgbs1);
        g.setColor(getColorWithRgbs(rgbs1));
        //void drawArc(int x, int y, int width, int height, int startAngle, int arcAngle)
        g.drawArc(offsetx+125, offsety+5, 78, 81, 100, 121);
        g.setColor(getColorWithRgbs(rgbs2));
        g.drawString("圆弧", offsetx+137, offsety+37);
        
        //填充圆形,扇形
        rgbs1 = rgbList.get(rgbindex);rgbindex++;
        rgbs2 = getReverseRgb(rgbs1);
        g.setColor(getColorWithRgbs(rgbs1));
        //void fillArc(int x, int y, int width, int height, int startAngle, int arcAngle)
        g.fillArc(offsetx+125, offsety+85, 88, 91, 110, 131);
        g.setColor(getColorWithRgbs(rgbs2));
        g.drawString("扇形", offsetx+137, offsety+132);
        
        //绘制一个多边形
        int[] xPoints1 = new int[]{offsetx+183, offsetx+223, offsetx+331, offsetx+210, offsetx+190};
        int[] yPoints1 = new int[]{offsety+10, offsety+41, offsety+71, offsety+81, offsety+91};
        int nPoints1 = 5;
        rgbs1 = rgbList.get(rgbindex);rgbindex++;
        rgbs2 = getReverseRgb(rgbs1);
        g.setColor(getColorWithRgbs(rgbs1));
        //void drawPolygon(int[] xPoints, int[] yPoints, int nPoints)
        g.drawPolygon(xPoints1, yPoints1, nPoints1);
        g.setColor(getColorWithRgbs(rgbs2));
        g.drawString("多边形", offsetx+197, offsety+57);
        
        //填充一个多边形
        int[] xPoints2 = new int[]{offsetx+183, offsetx+223, offsetx+331, offsetx+210, offsetx+190};
        int[] yPoints2 = new int[]{offsety+115, offsety+133, offsety+198, offsety+242, offsety+277};
        int nPoints2 = 5;
        rgbs1 = rgbList.get(rgbindex);rgbindex++;
        rgbs2 = getReverseRgb(rgbs1);
        g.setColor(getColorWithRgbs(rgbs1));
        //void fillPolygon(int[] xPoints, int[] yPoints, int nPoints)
        g.fillPolygon(xPoints2, yPoints2, nPoints2);
        g.setColor(getColorWithRgbs(rgbs2));
        g.drawString("填多边", offsetx+217, offsety+197);
    }
    
    private static void createAndShowGUI() {
        // 获取屏幕分辨率
        Toolkit toolkit = Toolkit.getDefaultToolkit();
        Dimension screenSize = toolkit.getScreenSize();
        
        double percent = 0.6;
        int screen_width = screenSize.width;
        int screen_height = screenSize.height;
        System.out.println("屏幕宽度:"+screen_width);
        System.out.println("屏幕高度:"+screen_height);
        System.out.println();
        
        int window_width = (int)(screen_width * percent);
        int window_height = (int)(screen_height * percent);
        System.out.println("窗体宽度:"+window_width);
        System.out.println("窗体高度:"+window_height);
        System.out.println();
        
        JFrame frame = new JFrame("GraphicsTest");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocation((screen_width-window_width)/2, (screen_height-window_height)/2);
        frame.setSize(window_width, window_height);
        
        GraphicsTest gtPanel = new GraphicsTest();

        
        // 注册键盘监听器
        frame.addKeyListener(new KeyListener() {
            @Override
            public void keyTyped(KeyEvent e) {
                if (e.isAltDown()) {
                    System.out.println("alt"+"键被按下了");
                } else if(e.isShiftDown()) {
                    System.out.println("Shift"+"键被按下了");
                } else if(e.isControlDown()) {
                    System.out.println("Control"+"键被按下了");
                } else {
                    boolean flag = Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK);
                    //键入某个键时调用此方法
                    if(flag) {
                        //System.out.println("现在是大写键状态");
                    }
                    else {
                        //System.out.println("现在是小写键状态");
                    }
                    char ch = e.getKeyChar();
                    //System.out.println("输入的字符是"+ch);
                }
            }
 
            @Override
            public void keyPressed(KeyEvent e) {
                //按下某个键时调用此方法
                //System.out.println("Key pressed: " + KeyEvent.getKeyText(e.getKeyCode()));
                gtPanel.keyPressed(KeyEvent.getKeyText(e.getKeyCode()));
            }
 
            @Override
            public void keyReleased(KeyEvent e) {
                //释放某个键时调用此方法
                //System.out.println("Key Released: " + KeyEvent.getKeyText(e.getKeyCode()));
                //System.out.println();
            }
        });

        frame.add(gtPanel);
        frame.setVisible(true);
    }
    
    public static void main(String[] args) {
        //设置输入法
        Locale locale = new Locale("en", "US");
        InputContext context = InputContext.getInstance();
        context.selectInputMethod(locale);
        
        SwingUtilities.invokeLater(GraphicsTest::createAndShowGUI);
    }
}

 

效果:

 

 

 

标签:java,int,offsetx,offsety,画图,rgbs1,swing,height,public
From: https://www.cnblogs.com/xuxiaobo/p/18392539

相关文章

  • Java中的堆
    Java中的堆一、引言在Java中,堆是一种重要的数据结构,它通常表现为一个完全二叉树,具有一些特定的性质。堆可以是最大堆或最小堆,其中最大堆的每个节点的值都不小于其子节点,而最小堆的每个节点的值都不大于其子节点。堆在很多算法中都有应用,比如堆排序、优先队列等。本文将详......
  • Java中BigInteger类的使用
    Java中BigInteger类的使用一、引言在Java编程语言中,处理大整数是一个常见的需求,尤其是在加密、科学计算和金融领域。Java提供了BigInteger类来处理任意精度的整数运算,这使得程序员可以轻松地处理超出基本数据类型范围的数值。本文将详细介绍BigInteger类的使用,包括其构造......
  • java计算机毕业设计家具销售电商平台(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景:随着互联网技术的飞速发展,电子商务已成为现代商业活动不可或缺的一部分,深刻改变了人们的消费习惯。在家具市场,传统销售模式受限于地域、时间等因素,难......
  • java计算机毕业设计家庭装修套餐消费管理(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着人们生活水平的提高和居住需求的多样化,家庭装修已成为现代家庭不可或缺的重要环节。然而,传统家庭装修过程中存在信息不对称、流程繁琐、管理效率......
  • java计算机毕业设计老来福平台(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景:随着社会的快速老龄化,老年人口比例持续上升,如何高效、人性化地管理老年人的生活与健康成为亟待解决的社会问题。老来福平台应运而生,旨在通过信息化手......
  • 无法在 Postman 中使用 JavaScript 访问发送的信息
    Postman是一个用于测试API的工具,它本身并不支持在请求中直接执行JavaScript代码。Postman主要用于发送HTTP请求并查看响应。如果你需要在发送请求时执行一些自定义的逻辑或处理请求数据,你可以考虑以下几种方法:使用Postman的预请求脚本(Pre-requestScript)或测试脚本(TestS......
  • 179java jsp SSM Springboot基于javaweb的流浪宠物管理系统流浪动物求助宠物领养管理(
    项目技术:Springboot+Maven+Vue等等组成,B/S模式+Maven管理等等。环境需要1.运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;3.tomcat环境:Tomcat7.x,8.x,9.x版本均可4.硬件环境:windows......
  • Java基于微信小程序的美食推荐小程序,附源码
    博主介绍:✌Java徐师兄、7年大厂程序员经历。全网粉丝13w+、csdn博客专家、掘金/华为云等平台优质作者、专注于Java技术领域和毕业项目实战✌......
  • 177java jsp SSM Springboot健身房管理系统健身课程器材管理(源码+文档+运行视频+讲解
    项目技术:Springboot+Maven+Vue等等组成,B/S模式+Maven管理等等。环境需要1.运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;3.tomcat环境:Tomcat7.x,8.x,9.x版本均可4.硬件环境:windows......
  • 176java jsp SSM Springboot装饰工程管理系统工程合同项目预算报价装饰材料总计划装修
    项目技术:Springboot+Maven+Vue等等组成,B/S模式+Maven管理等等。环境需要1.运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;3.tomcat环境:Tomcat7.x,8.x,9.x版本均可4.硬件环境:windows......