Java 窗口 小马图像窗口
写在前面:
eclipse接着爽到
全是借鉴的,东改西改,而且记不住原网址了
两个月前写的,忘了思路,嗯,It just works
运行效果:


图像随便选(放到*jar所在目录*\\pictures\\)
能选择永远显示在前
窗口能拖动
鼠标滚轮放大缩小
可以隐藏UI
Java代码如下:
1 package ponyimg;
2
3 import java.awt.*;
4 import java.awt.event.ActionEvent;
5 import java.awt.event.ActionListener;
6 import java.awt.event.MouseAdapter;
7 import java.awt.event.MouseEvent;
8 import java.awt.event.MouseMotionAdapter;
9 import java.awt.event.MouseWheelEvent;
10 import java.awt.event.MouseWheelListener;
11 import java.io.*;
12 import javax.swing.ImageIcon;
13 import javax.swing.JButton;
14 import javax.swing.JFileChooser;
15 import javax.swing.JFrame;
16 import javax.swing.JLabel;
17
18 public class PonyIMG extends JFrame
19 {
20 static int minx=192,miny=108;
21 static boolean ishide=false;
22 static int pframexOri,pframeyOri,pframex,pframey,ponyresult;
23 static int ori_pict_x,ori_pict_y,pict_x,pict_y,ponyscale=20;
24 static String ponySname;
25 static ImageIcon ponyimgtmp;
26
27 public static void main(String[] args) throws Exception
28 {
29 JFrame ponyFrame=new JFrame("PonyIMG");
30 File directory = new File("");
31 ponyFrame.setIconImage(Toolkit.getDefaultToolkit().getImage(directory.getCanonicalPath()+"\\icons\\32.png"));
32 ImageIcon ponydefaultimg=new ImageIcon(Toolkit.getDefaultToolkit().getImage(directory.getCanonicalPath()+"\\pictures\\default.png"));
33 ori_pict_x=ponydefaultimg.getIconWidth();
34 ori_pict_y=ponydefaultimg.getIconHeight();
35 JButton ponyb_front = new JButton("");
36 JButton ponyb_exit = new JButton("");
37 JButton ponyb_open = new JButton("");
38 JButton ponyb_hide = new JButton("");
39 ImageIcon ponyb_fronti = new ImageIcon(Toolkit.getDefaultToolkit().getImage(directory.getCanonicalPath()+"\\icons\\front.png"));
40 ImageIcon ponyb_nfronti = new ImageIcon(Toolkit.getDefaultToolkit().getImage(directory.getCanonicalPath()+"\\icons\\nfront.png"));
41 ImageIcon ponyb_exiti = new ImageIcon(Toolkit.getDefaultToolkit().getImage(directory.getCanonicalPath()+"\\icons\\exit.png"));
42 ImageIcon ponyb_openi = new ImageIcon(Toolkit.getDefaultToolkit().getImage(directory.getCanonicalPath()+"\\icons\\open.png"));
43 ImageIcon ponyb_hidei = new ImageIcon(Toolkit.getDefaultToolkit().getImage(directory.getCanonicalPath()+"\\icons\\hide.png"));
44 ImageIcon ponyb_uhidei = new ImageIcon(Toolkit.getDefaultToolkit().getImage(directory.getCanonicalPath()+"\\icons\\uhide.png"));
45 JFileChooser ponychooser = new JFileChooser(directory.getCanonicalPath()+"\\pictures");
46 ponychooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
47 ponychooser.setDialogTitle("Get an image...");
48
49 /*Whole*/
50 ponyFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
51 ponyFrame.setLayout(null);
52 ponyFrame.setResizable(false);
53 ponyFrame.setLocationRelativeTo(null);
54 ponyFrame.setSize(ponydefaultimg.getIconWidth(),ponydefaultimg.getIconHeight());
55 ponyFrame.setUndecorated(true);
56 ponyFrame.setAlwaysOnTop(false);
57 ponyFrame.setBackground(new Color(0,0,0,0));
58
59 /*BUTTON_FRONT*/
60 ponyb_front.setIcon(ponyb_nfronti);
61 ponyb_front.setSize(27, 27);
62 ponyb_front.setLocation(ponydefaultimg.getIconWidth()-64, 5);
63 ponyb_front.addActionListener(new ActionListener(){
64 public void actionPerformed(ActionEvent e)
65 {
66 if(ponyFrame.isAlwaysOnTop()==true)
67 {
68 ponyFrame.setAlwaysOnTop(false);
69 ponyb_front.setIcon(ponyb_nfronti);
70 }
71 else
72 {
73 ponyFrame.setAlwaysOnTop(true);
74 ponyb_front.setIcon(ponyb_fronti);
75 }
76 }
77 });
78 ponyFrame.add(ponyb_front);
79
80 /*BUTTON_EXIT*/
81 ponyb_exit.setIcon(ponyb_exiti);
82 ponyb_exit.setSize(27, 27);
83 ponyb_exit.setLocation(ponydefaultimg.getIconWidth()-32, 5);
84 ponyb_exit.addActionListener(new ActionListener(){
85 public void actionPerformed(ActionEvent e)
86 {
87 System.exit(0);
88 }
89 });
90 ponyFrame.add(ponyb_exit);
91
92 /*BUTTON_OPEN*/
93 ponyb_open.setIcon(ponyb_openi);
94 ponyb_open.setSize(27, 27);
95 ponyb_open.setLocation(5, ponydefaultimg.getIconHeight()-32);
96 ponyFrame.add(ponyb_open);
97
98 /*BUTTON_HIDE*/
99 ponyb_hide.setIcon(ponyb_uhidei);
100 ponyb_hide.setSize(27, 27);
101 ponyb_hide.setLocation(5, 5);
102 ponyb_hide.addActionListener(new ActionListener(){
103 public void actionPerformed(ActionEvent e)
104 {
105 if(ishide==false) {
106 ishide=true;
107 ponyb_hide.setIcon(ponyb_hidei);
108 ponyb_front.setVisible(false);
109 ponyb_exit.setVisible(false);
110 ponyb_open.setVisible(false);
111 }
112 else {
113 ishide=false;
114 ponyb_hide.setIcon(ponyb_uhidei);
115 ponyb_front.setVisible(true);
116 ponyb_exit.setVisible(true);
117 ponyb_open.setVisible(true);
118 }
119
120 }
121 });
122 ponyFrame.add(ponyb_hide);
123
124 /*IMG*/
125 JLabel Label00 = new JLabel(ponydefaultimg);
126 Label00.setSize(ponydefaultimg.getIconWidth(),ponydefaultimg.getIconHeight());
127 ponyFrame.add(Label00);
128
129 /*BUTTON_OPEN*/
130 ponyb_open.addActionListener(new ActionListener(){
131 public void actionPerformed(ActionEvent e)
132 {
133 ponyresult=ponychooser.showOpenDialog(ponyFrame);
134 if(ponychooser.APPROVE_OPTION == ponyresult)
135 {
136 ponySname=ponychooser.getSelectedFile().getPath();
137 ponyimgtmp=new ImageIcon(Toolkit.getDefaultToolkit().getImage(ponySname));
138
139 if(!(ponyimgtmp.getIconWidth()>=minx && ponyimgtmp.getIconHeight()>=miny))
140 {
141 ponyimgtmp=ponydefaultimg;
142 }
143 ori_pict_x=ponyimgtmp.getIconWidth();
144 ori_pict_y=ponyimgtmp.getIconHeight();
145 Label00.setIcon(ponyimgtmp);
146 ponyFrame.setSize(ponyimgtmp.getIconWidth(),ponyimgtmp.getIconHeight());
147 Label00.setSize(ponyimgtmp.getIconWidth(),ponyimgtmp.getIconHeight());
148 ponyb_front.setLocation(ponyimgtmp.getIconWidth()-64, 5);
149 ponyb_exit.setLocation(ponyimgtmp.getIconWidth()-32, 5);
150 ponyb_open.setLocation(5, ponyimgtmp.getIconHeight()-32);
151 ponyscale=20;
152 }
153 }
154 });
155
156 /*MOUSE*/
157 ponyFrame.addMouseListener(new MouseAdapter() {
158 @Override
159 public void mousePressed(MouseEvent e) {
160 pframexOri=e.getX();
161 pframeyOri=e.getY();
162 }
163 });
164 ponyFrame.addMouseMotionListener(new MouseMotionAdapter() {
165 @Override
166 public void mouseDragged(MouseEvent e) {
167 ponyFrame.setLocation(e.getXOnScreen()-pframexOri,e.getYOnScreen()-pframeyOri);
168 }
169 });
170 ponyFrame.addMouseWheelListener(new MouseWheelListener() {
171 @Override
172 public void mouseWheelMoved(MouseWheelEvent e) {
173 if(e.getWheelRotation()==-1){
174 if(ponyscale<=19) {
175 ++ponyscale;
176 pict_x=(ori_pict_x/20)*ponyscale;
177 pict_y=(ori_pict_y/20)*ponyscale;
178 if(ponyscale==20) {
179 pict_x=ori_pict_x;
180 pict_y=ori_pict_y;
181 }
182 ImageIcon ponytmp=new ImageIcon(ponyimgtmp.getImage().getScaledInstance(pict_x, pict_y, Image.SCALE_DEFAULT));
183 Label00.setIcon(ponytmp);
184 ponyFrame.setSize(pict_x,pict_y);
185 Label00.setSize(pict_x,pict_y);
186 ponyb_front.setLocation(pict_x-64, 5);
187 ponyb_exit.setLocation(pict_x-32, 5);
188 ponyb_open.setLocation(5, pict_y-32);
189 }
190 }
191 if(e.getWheelRotation()==1){
192 if(ponyscale>=1 && ((ori_pict_x/20)*(ponyscale-1)>=minx) && ((ori_pict_y/20)*(ponyscale-1)>=miny)) {
193 --ponyscale;
194 pict_x=(ori_pict_x/20)*ponyscale;
195 pict_y=(ori_pict_y/20)*ponyscale;
196 ImageIcon ponytmp=new ImageIcon(ponyimgtmp.getImage().getScaledInstance(pict_x, pict_y, Image.SCALE_DEFAULT));
197 Label00.setIcon(ponytmp);
198 ponyFrame.setSize(pict_x,pict_y);
199 Label00.setSize(pict_x,pict_y);
200 ponyb_front.setLocation(pict_x-64, 5);
201 ponyb_exit.setLocation(pict_x-32, 5);
202 ponyb_open.setLocation(5, pict_y-32);
203 }
204 }
205 }
206 });
207
208 ponyFrame.setVisible(true);
209 }
210 }
没注释,摸了
附件:
*jar所在目录*\\icons\\
32.png
exit.png

front.png

hide.png

nfront.png

open.png

uhide.png
*jar所在目录*\\pictures\\
default.png
Java 窗口 小马图像窗口的更多相关文章
- Java 窗口 小马时钟
写在前面: eclipse爽到 好多都是抄的,记不住原网址了 摸爆了 搞了一个无边框JFrame,给JFrame加入鼠标监听器实现了拖动 搞了按钮,可以关闭.最小化.始终显示在前.静音 icon是抄( ...
- 框架一般用作Java应用程序的窗口,而Applet是Java小程序的窗口
框架一般用作Java应用程序的窗口,而Applet是Java小程序的窗口. 与Frame不同,Applet是在网页中显示的,也可以通过添加Panel进行组件布局. package TomAwt; im ...
- Android开发5:应用程序窗口小部件App Widgets的实现
前言 本次主要是实现一个Android应用,实现静态广播.动态广播两种改变 widget内容的方法,即在上篇博文中实验的基础上进行修改,所以此次实验的重点是AppWidget小部件的实现啦~ 首先,我 ...
- 在android程序中加入widget(窗口小部件)并与之交互的关键代码
摘要: widget(窗口小部件)可以增强应用程序的交互性, 是很多应用中都会用到的功能,本文不求大而全,但是会给出程序与widget交互的关键代码 正文: 其实widget是嵌入(embedded) ...
- Android 之窗口小部件详解--App Widget
Android 之窗口小部件详解--App Widget 版本号 说明 作者 日期 1.0 添加App Widge介绍和示例 Sky Wang 2013/06/27 1 App ...
- Android 之窗口小部件详解(三) 部分转载
原文地址:http://blog.csdn.net/iefreer/article/details/4626274. (一) 应用程序窗口小部件App Widgets 应用程序窗口小部件(Widget ...
- Android 之窗口小部件高级篇--App Widget 之 RemoteViews - 跨到对岸去
在之前的一篇博文( Android 之窗口小部件详解--App Widge t)中,已经介绍了App Widget的基本用法和简单实例.这篇主要讲解 App Widget 的高级内容,即通过 Remo ...
- Android 之窗口小部件高级篇--App Widget 之 RemoteViews
Android 之窗口小部件高级篇--App Widget 之 RemoteViews 在之前的一篇博文(Android 之窗口小部件详解--App Widget)中,已经介绍了App Widget的 ...
- Android Widget(窗口小部件)
Android Widget简介 应用程序窗口小部件(Widget)是微型的应用程序视图,它可以被嵌入到其它应用程序中(比如桌面)并接收周期性的更新.你可以通过一个App Widget Provide ...
随机推荐
- 机器学习算法·KNN
机器学习算法应用·KNN算法 一.问题描述 验证码目前在互联网上非常常见,从学校的教务系统到12306购票系统,充当着防火墙的功能.但是随着OCR技术的发展,验证码暴露出的安全问题越来越严峻.目前对验 ...
- Haproxy-1.8.20 编译安装:
1 ) haproxy-1.8.20 : # 1.1 ) 安装Haproxy的依赖关系: yum install gcc gcc-c++ glibc glibc-devel pcre pcre-dev ...
- 【Linux】rsync 守护进程的配置
环境 centos7.2 1.首先查看是否安装rsync的相关包 rpm -qa | grep rsync rsync-3.1.2-4.el7.x86_64 如果没安装就yum install rsy ...
- centos7.4使用filrewalld打开关闭防火墙与端口
1.firewalld的基本使用启动: systemctl start firewalld关闭: systemctl stop firewalld查看状态: systemctl status fire ...
- 1.2V转3V芯片,电路图很少就三个元件
1.2V的镍氢电池由于稳定高,应用产品也是很广,但是由于电压低,需要1.2V转3V芯片,来将1.2V的电压升压转3V,稳定输出供电. 一般性的1.2V转3V芯片,都是用PW5100比较多,固定输出电压 ...
- MySQL简介及安装 mysql Ver 14.14 Distrib 5.7.28
1.MySQL简介 1.数据库产品演变 第一代数据库架构: RDBMS 关系型数据库时代 : 合的时代 代表产品 :Oracle .MSSQL .MySQL.SQL server 第二代数据库架构:拆 ...
- 30分钟带你了解「消息中间件」Kafka、RocketMQ
消息中间件的应用场景 主流 MQ 框架及对比 说明 Kafka 优点 Kafka 缺点 RocketMQ Pulsar 发展趋势 各公司发展 Kafka Kafka 是什么? Kafka 术语 Kaf ...
- 基于循环队列的BFS的原理及实现
文章首发于微信公众号:几何思维 1.故事起源 有一只蚂蚁出去寻找食物,无意中进入了一个迷宫.蚂蚁只能向上.下.左.右4个方向走,迷宫中有墙和水的地方都无法通行.这时蚂蚁犯难了,怎样才能找出到食物的最短 ...
- mysql(视图 事务 索引 外键)
视图 视图本质就是对查询的封装 创建视图(定义视图 起名以v_开头) create view v_students as select classes.name as c_name ,stud ...
- 解决PHP无法监听9000端口问题/502错误解决办法
问题背景 配置nginx+php服务的时候,发现网站能打开html,打开php文件就显示502,一般这个是php没启动啊啥的导致不能正常解析php文件. 原因分析 因为nginx解析php文件是交给f ...