- 浏览: 461944 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (132)
- Java (17)
- Eclipse (2)
- Struts2 (6)
- SWT (9)
- Java Web Start (2)
- Heritrix (4)
- Nutch (1)
- Internet (2)
- J2me (2)
- Windows (4)
- Swing (8)
- JavaScript (11)
- Hibernate (1)
- Spring (6)
- Mysql (9)
- Oracle (10)
- Linux (6)
- RESTful (3)
- XML (1)
- Flex (4)
- EL (1)
- Apache (4)
- VC (3)
- OpenSourceLicence (1)
- Tomcat (4)
- Tiles2 (1)
- nosql (6)
- else (4)
- Nginx (2)
最新评论
-
mzlogin:
然而并没有讲 hash 函数
深入理解HashMap(及hash函数的真正巧妙之处) -
czp11210:
hi,你这篇文章很好。有两个细节跟你确认下:1.你使用的amo ...
Mysql 基于 Amoeba 的 水平和垂直 分片 -
Mybeautiful:
It seems the amoeba doesn't sup ...
Mysql 基于 Amoeba 的 水平和垂直 分片 -
xs.cctv:
言简意赅。。。。。。
深入理解HashMap(及hash函数的真正巧妙之处) -
mnhkahn:
h & (length-1)这个其实还是一个模运算,只 ...
深入理解HashMap(及hash函数的真正巧妙之处)
刚才写了 Swing 实现截图小软件(一)后,点击“保存草稿”,回来再修改,点“编辑”在“可视化编辑器”中就出现了一堆的HTML代码了。 写不下去了,就直接转到(二)好了。
接上一节
第三步:为截取图像时,鼠标所标示的截取区域用矩形表示出来。
要实现根据鼠标的拖动,实时画矩形,可以采用
1. 取得鼠标的按下点和移动当前点坐标
2. 创建一个缓冲图形对象(BufferedImage) bi
3. 将原始图形画到 bi 中
4. 根据取得的坐标画一个矩形到 bi 中
5. 将 bi 画到屏幕上
imageLabel.addMouseMotionListener(new MouseMotionListener() { public void mouseDragged(MouseEvent e) { //1. 取得鼠标的按下点和移动当前点坐标 xEnd = e.getX(); yEnd = e.getY(); //2. 创建一个缓冲图形对象(BufferedImage) bi BufferedImage bi = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB); Graphics2D g2d = (Graphics2D)bi.getGraphics(); //3. 将原始图形画到 bi 中 g2d.drawImage(image, 0, 0, null); g2d.setColor(Color.RED); //设置画笔颜色为红色 //4. 根据取得的坐标画一个矩形到 bi 中 //以鼠标按下点坐标和鼠标拖动的当前点坐标画矩形,作为截图区域的展示 //+1 与 -1 是为了防止截图时将矩形框也截进去 g2d.drawRect(Math.min(x, xEnd) - 1, Math.min(y, yEnd) - 1, Math.abs(xEnd - x) + 1, Math.abs(yEnd - y) + 1); g2d.dispose(); //5. 将 bi 画到屏幕上 Graphics g = imageLabel.getGraphics(); g.drawImage(bi, 0, 0, null); g.dispose(); } public void mouseMoved(MouseEvent e) { } });
完整代码:
import java.awt.AWTException; import java.awt.Color; import java.awt.Cursor; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Rectangle; import java.awt.Robot; import java.awt.Toolkit; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionListener; import java.awt.image.BufferedImage; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; /** * 全屏显示的窗口, 按 Alt + F4 退出 * @author pengranxiang */ public class ScreenWindow extends JFrame { private static final long serialVersionUID = -3758062802950480258L; private Image image; private JLabel imageLabel; private int x, y, xEnd, yEnd; //用于记录鼠标点击开始和结束的坐标 public ScreenWindow() throws AWTException, InterruptedException { //取得屏幕尺寸 Dimension screenDims = Toolkit.getDefaultToolkit().getScreenSize(); //取得全屏幕截图 image = GraphicsUtils.getScreenImage(0, 0, screenDims.width, screenDims.height); //用于展示截图 imageLabel = new JLabel(new ImageIcon(image)); //当鼠标在imageLabel上时,展示为 十字形 imageLabel.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR)); createAction(); this.getContentPane().add(imageLabel); this.setUndecorated(true); //去掉窗口装饰 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); this.setExtendedState(JFrame.MAXIMIZED_BOTH); //窗口最大化 } /** * 实现监听动作 */ private void createAction() { imageLabel.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { x = e.getX(); y = e.getY(); } public void mouseReleased(MouseEvent e) { xEnd = e.getX(); yEnd = e.getY(); //鼠标弹起时,取得鼠标起始两点组成的矩形区域的图像 try { //因为 xEnd 可能比 x 小 (由右网左移动)起始坐标取其中较小值,xEnd - x 取其绝对值, 同样处理y image = GraphicsUtils.getScreenImage(Math.min(x, xEnd), Math.min(y, yEnd), Math.abs(xEnd - x), Math.abs(yEnd - y)); } catch (AWTException e1) { e1.printStackTrace(); } catch (InterruptedException e1) { e1.printStackTrace(); } //为了查看截图效果,将区域截图的部分代替全屏的截图展示 imageLabel.setIcon(new ImageIcon(image)); } }); imageLabel.addMouseMotionListener(new MouseMotionListener() { public void mouseDragged(MouseEvent e) { //1. 取得鼠标的按下点和移动当前点坐标 xEnd = e.getX(); yEnd = e.getY(); //2. 创建一个缓冲图形对象(BufferedImage) bi BufferedImage bi = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB); Graphics2D g2d = (Graphics2D)bi.getGraphics(); //3. 将原始图形画到 bi 中 g2d.drawImage(image, 0, 0, null); g2d.setColor(Color.RED); //设置画笔颜色为红色 //4. 根据取得的坐标画一个矩形到 bi 中 //以鼠标按下点坐标和鼠标拖动的当前点坐标画矩形,作为截图区域的展示 //+1 与 -1 是为了防止截图时将矩形框也截进去 g2d.drawRect(Math.min(x, xEnd) - 1, Math.min(y, yEnd) - 1, Math.abs(xEnd - x) + 1, Math.abs(yEnd - y) + 1); g2d.dispose(); //5. 将 bi 画到屏幕上 Graphics g = imageLabel.getGraphics(); g.drawImage(bi, 0, 0, null); g.dispose(); } public void mouseMoved(MouseEvent e) { } }); } public static void main(String[] args) throws AWTException, InterruptedException { new ScreenWindow(); } } class GraphicsUtils { /** * 截图屏幕中制定区域的图片 * @param x * @param y * @param w * @param h * @return 被截部分的BufferedImage对象 * @throws AWTException * @throws InterruptedException */ public static BufferedImage getScreenImage(int x, int y, int w, int h) throws AWTException, InterruptedException { Robot robot = new Robot(); BufferedImage screen = robot.createScreenCapture(new Rectangle(x, y, w, h)); return screen; } }
到这里,就可以有截图区域提示了。
然后,现在的截图显示,直接覆盖了前面的模拟屏幕,这只是一个演示。 软件中是需要一个按钮来开启这个模拟屏幕然后再去截图的。
第四步:创建程序主窗口,触发模拟屏幕,让截图的图像显示在主窗口中。
为了将截得的图像,传入到主窗口中,需要修改ScreenWindow, 增加 targetLabel 参数,用户接收主窗口中需要显示该截图的,目标组件。增加了一个右键点击退出模拟屏幕,所以增加了鼠标右键点击事件监听。
ScreenWindow完整代码:
import java.awt.AWTException; import java.awt.Color; import java.awt.Cursor; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Rectangle; import java.awt.Robot; import java.awt.Toolkit; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionListener; import java.awt.image.BufferedImage; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; /** * 全屏显示的窗口, 按 Alt + F4 退出 * @author pengranxiang */ public class ScreenWindow extends JFrame { private static final long serialVersionUID = -3758062802950480258L; private Image image; private JLabel imageLabel; //将截图的图像加载到的目标组件,用于传值 private JLabel targetLabel; private int x, y, xEnd, yEnd; //用于记录鼠标点击开始和结束的坐标 public ScreenWindow(JLabel targetLabel) throws AWTException, InterruptedException { //目标组件初始化 this.targetLabel = targetLabel; //取得屏幕尺寸 Dimension screenDims = Toolkit.getDefaultToolkit().getScreenSize(); //取得全屏幕截图 image = GraphicsUtils.getScreenImage(0, 0, screenDims.width, screenDims.height); //用于展示截图 imageLabel = new JLabel(new ImageIcon(image)); //当鼠标在imageLabel上时,展示为 十字形 imageLabel.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR)); createAction(); this.getContentPane().add(imageLabel); this.setUndecorated(true); //去掉窗口装饰 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); this.setExtendedState(JFrame.MAXIMIZED_BOTH); //窗口最大化 } /** * 实现监听动作 */ private void createAction() { imageLabel.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { if(e.getButton() == MouseEvent.BUTTON3) { //鼠标右键单击事件 //退出ScreenWindow ScreenWindow.this.dispose(); } } public void mousePressed(MouseEvent e) { x = e.getX(); y = e.getY(); } public void mouseReleased(MouseEvent e) { xEnd = e.getX(); yEnd = e.getY(); //鼠标弹起时,取得鼠标起始两点组成的矩形区域的图像 try { //因为 xEnd 可能比 x 小 (由右网左移动)起始坐标取其中较小值,xEnd - x 取其绝对值, 同样处理y image = GraphicsUtils.getScreenImage(Math.min(x, xEnd), Math.min(y, yEnd), Math.abs(xEnd - x), Math.abs(yEnd - y)); } catch (AWTException e1) { e1.printStackTrace(); } catch (InterruptedException e1) { e1.printStackTrace(); } //为了查看截图效果,将区域截图的部分代替全屏的截图展示 //imageLabel.setIcon(new ImageIcon(image)); //将所截得的图像,加载到目标组件targetLabel targetLabel.setIcon(new ImageIcon(image)); //退出该ScreenWindow ScreenWindow.this.dispose(); } }); imageLabel.addMouseMotionListener(new MouseMotionListener() { public void mouseDragged(MouseEvent e) { //1. 取得鼠标的按下点和移动当前点坐标 xEnd = e.getX(); yEnd = e.getY(); //2. 创建一个缓冲图形对象(BufferedImage) bi BufferedImage bi = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB); Graphics2D g2d = (Graphics2D)bi.getGraphics(); //3. 将原始图形画到 bi 中 g2d.drawImage(image, 0, 0, null); g2d.setColor(Color.RED); //设置画笔颜色为红色 //4. 根据取得的坐标画一个矩形到 bi 中 //以鼠标按下点坐标和鼠标拖动的当前点坐标画矩形,作为截图区域的展示 //+1 与 -1 是为了防止截图时将矩形框也截进去 g2d.drawRect(Math.min(x, xEnd) - 1, Math.min(y, yEnd) - 1, Math.abs(xEnd - x) + 1, Math.abs(yEnd - y) + 1); g2d.dispose(); //5. 将 bi 画到屏幕上 Graphics g = imageLabel.getGraphics(); g.drawImage(bi, 0, 0, null); g.dispose(); } public void mouseMoved(MouseEvent e) { } }); } // public static void main(String[] args) throws AWTException, InterruptedException { // new ScreenWindow(); // } } class GraphicsUtils { /** * 截图屏幕中制定区域的图片 * @param x * @param y * @param w * @param h * @return 被截部分的BufferedImage对象 * @throws AWTException * @throws InterruptedException */ public static BufferedImage getScreenImage(int x, int y, int w, int h) throws AWTException, InterruptedException { Robot robot = new Robot(); BufferedImage screen = robot.createScreenCapture(new Rectangle(x, y, w, h)); return screen; } }
主程序 SanpShoot 完整代码:
import java.awt.AWTException; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.GroupLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; /** * 屏幕截图小程序 * @author pengranxiang * */ public class SnapShoot extends JFrame { /** * */ private static final long serialVersionUID = 1L; private JButton snapButton; private JLabel imageLabel; public SnapShoot() { initUI(); initLayout(); createAction(); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setSize(600, 400); this.setTitle("截图小工具"); this.setLocationRelativeTo(null); //居中 this.setVisible(true); } private void initUI() { snapButton = new JButton("开始截图(点右键退出)"); imageLabel = new JLabel(); } private void initLayout() { JPanel pane = new JPanel(); pane.add(imageLabel); JScrollPane imgScrollPane = new JScrollPane(pane); Container container = this.getContentPane(); GroupLayout layout = new GroupLayout(container); container.setLayout(layout); layout.setAutoCreateContainerGaps(true); layout.setAutoCreateGaps(true); GroupLayout.ParallelGroup hGroup = layout.createParallelGroup(); hGroup .addComponent(snapButton) .addComponent(imgScrollPane); layout.setHorizontalGroup(hGroup); GroupLayout.SequentialGroup vGroup = layout.createSequentialGroup(); vGroup .addComponent(snapButton) .addComponent(imgScrollPane); layout.setVerticalGroup(vGroup); } private void createAction() { snapButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { //开启模拟屏幕,将显示截图的目标组件传入 new ScreenWindow(imageLabel); } catch (AWTException e1) { e1.printStackTrace(); } catch (InterruptedException e1) { e1.printStackTrace(); } } }); } public static void main(String[] args) { new SnapShoot(); } }
以上,就完成了软件中,全屏,区域截图的功能。
小软件还有其他四个功能,明天继续。。。。O(∩_∩)O~
评论
8 楼
如果风……
2011-05-13
呵呵,是我的错啊,最后居然忘记调事件了。晕
7 楼
如果风……
2011-05-13
我检查了一下我写的代码,没有错啊,
6 楼
如果风……
2011-05-13
我写了一下,怎么就不能运行的啊,
5 楼
沙舟狼客
2011-03-15
写的挺好的,就是有一点不足,文件保存的格式没有
[code language="Java"]
file = chooser.getSelectedFile();
System.out.println(file.getAbsolutePath());
file = new File(file.getAbsoluteFile()+".jpg");
[code language="Java"]
file = chooser.getSelectedFile();
System.out.println(file.getAbsolutePath());
file = new File(file.getAbsoluteFile()+".jpg");
4 楼
pengranxiang
2011-03-02
lancelotly 写道
楼主单独看这个截图软件的第2部分是不是有2处小bug,
1.楼主做了一个右键单击退出的操作,但是如果程序运行后我不点击截图button,那么ScreenWindow类就没有初始化,那么基于ScreenWindow的imageLabel的鼠标事件就是不成立的,再者我点击截图后实际上显示的就是targetLabel,此时的事件都是基于targetLabel的,这时候imageLabel的鼠标事件也不是成立的。
2.执行imageLabel的截图坐标处如果我截图只单击一下鼠标,则要么是w,要么是h肯定有一个是没有值的,这个应该给一个初始值吧。
1.楼主做了一个右键单击退出的操作,但是如果程序运行后我不点击截图button,那么ScreenWindow类就没有初始化,那么基于ScreenWindow的imageLabel的鼠标事件就是不成立的,再者我点击截图后实际上显示的就是targetLabel,此时的事件都是基于targetLabel的,这时候imageLabel的鼠标事件也不是成立的。
2.执行imageLabel的截图坐标处如果我截图只单击一下鼠标,则要么是w,要么是h肯定有一个是没有值的,这个应该给一个初始值吧。
关于第一点:
程序运行后,不点击截图Button,那么截图用的模拟屏幕不会出现, ScreenWindow不会要初始化,也不会有ScreenWindow中 imageLabel 的鼠标事件需要响应。
点击截图后,显示的是 模拟屏幕 ScreenWindow中的 imageLabel , 不是targetLabel,
targetLabel 只为 SnapShoot 的 imageLabel 设置显示图片用。
截图完毕后,模拟屏幕 ScreenWindow 会释放,此时 ScreenWindow 的 imageLabel 也不会有需要响应的事件了。 而 SnapShoot 的 imageLabel 已经通过 ScreenWindow 的targetLabel 设置了,需要显示的图片。是可以响应事件的。
所以第一点,我没有测试出什么问题。 可能是我没理解清楚吧。
关于第二点:
的确存在这个问题,可以在截图方法中判断,确保截图的宽和高 > 0
/** * 截图屏幕中制定区域的图片 * @param x * @param y * @param w * @param h * @return 被截部分的BufferedImage对象 * @throws AWTException * @throws InterruptedException */ public static BufferedImage getScreenImage(int x, int y, int w, int h) throws AWTException, InterruptedException { Robot robot = new Robot(); w = w > 0 ? w : 1; h = h > 0 ? h : 1; BufferedImage screen = robot.createScreenCapture(new Rectangle(x, y, w, h)); return screen; }
3 楼
lancelotly
2011-03-01
楼主单独看这个截图软件的第2部分是不是有2处小bug,
1.楼主做了一个右键单击退出的操作,但是如果程序运行后我不点击截图button,那么ScreenWindow类就没有初始化,那么基于ScreenWindow的imageLabel的鼠标事件就是不成立的,再者我点击截图后实际上显示的就是targetLabel,此时的事件都是基于targetLabel的,这时候imageLabel的鼠标事件也不是成立的。
2.执行imageLabel的截图坐标处如果我截图只单击一下鼠标,则要么是w,要么是h肯定有一个是没有值的,这个应该给一个初始值吧。
1.楼主做了一个右键单击退出的操作,但是如果程序运行后我不点击截图button,那么ScreenWindow类就没有初始化,那么基于ScreenWindow的imageLabel的鼠标事件就是不成立的,再者我点击截图后实际上显示的就是targetLabel,此时的事件都是基于targetLabel的,这时候imageLabel的鼠标事件也不是成立的。
2.执行imageLabel的截图坐标处如果我截图只单击一下鼠标,则要么是w,要么是h肯定有一个是没有值的,这个应该给一个初始值吧。
2 楼
joejoewei
2011-02-27
支持支持,我才用qt实现了类qq的截图,正想再用swing实现,好好学习下了~~~
1 楼
gml520
2011-02-25
支持这样的文章,如果能配上图就好了。
发表评论
-
Swing 实现截图小软件 (六)
2011-03-02 17:32 2932既然 sdtm1016 兄 给出新的建议,那我们就继续完善下 ... -
Swing 实现截图小软件 (五)
2011-03-01 12:13 2207应大家的要求, 继续完善截图小软件。 这次增加两个功能: ... -
Swing 实现截图小软件 (四)
2011-02-25 12:14 1579接上一节, 我们的截图小软件,功能基本完成,就剩下最后的 ... -
Swing 实现截图小软件 (三)
2011-02-24 11:53 3618前面两节完成了,截图软件的基本功能:全屏,区域截图 功 ... -
Swing 实现截图小软件 (一)
2011-02-23 23:09 2102软件功能: ... -
Swing 做的一個模仿 阿里旺旺 的界面
2010-05-19 17:39 2035有朋友向我要,“Swing做的QQ登陸介面”的源碼,呵呵,不好 ... -
Swing 做了一个模仿QQ2009的登录界面
2009-06-23 10:10 3689今天用Swing 做了一个模仿QQ2009的登录界面,用到了开 ...
相关推荐
NULL 博文链接:https://pengranxiang.iteye.com/blog/935433
本项目是使用Swing实现的一个仿QQ截图小工具,它旨在提供类似QQ截图的功能,让用户在桌面环境中能够方便地进行屏幕截图并进行编辑。 首先,Swing组件库提供了丰富的组件,如JFrame、JButton、JPanel等,这些组件...
以下是对这个"java swing 截屏软件实现"的详细知识点解析: 1. **Swing组件**: Swing提供了一套丰富的组件库,如JFrame、JButton、JLabel等,用于构建用户界面。在这个截屏软件中,可能会用到JFrame作为主窗口,...
java swing 实现的带启动界面的简易截图软件,启动界面有进度条,可保存可粘贴到qq微信,简单实用
总的来说,用Java Swing实现一个PDF阅读器是一个涉及多方面技能的任务,包括对PDF格式的理解、Java GUI编程、IO操作以及第三方库的熟练使用。通过不断学习和实践,可以构建出功能强大且用户友好的PDF阅读器。
java swing实现学生住宿管理系统(源码) java swing实现学生住宿管理系统(源码) java swing实现学生住宿管理系统(源码) java swing实现学生住宿管理系统(源码) java swing实现学生住宿管理系统(源码) java ...
【Swing小管理项目源码】是一个基于Java Swing开发的桌面应用程序示例,它涵盖了多个核心功能,包括用户界面的设计、数据操作以及交互逻辑。Swing是Java的标准库,用于构建图形用户界面(GUI),提供了丰富的组件库...
本项目是一套基于Java Swing实现的日历记事本系统,主要针对计算机相关专业的正在学习java的学生与需要项目实战练习的Java学习者。 包含:项目源码、报告文档等。 项目都经过严格调试,确保可以运行! 该系统功能...
最后,作者想说的是,1.9块钱的资源,你买不了吃亏,买不了上当,只需省一片绿箭口香糖的钱,你就能拥有一个用于整蛊的Java Swing实现,你在玩的过程中,还可以初步了解一些Java Swing的知识,如此说来,少年,抓紧时间下载吧。
java贪吃蛇javaswing实现贪吃蛇javaswing实现贪吃蛇javaswing实现贪吃蛇javaswing实现贪吃蛇javaswing实现贪吃蛇javaswing实现贪吃蛇javaswing实现贪吃蛇javaswing实现贪吃蛇javaswing实现贪吃蛇javaswing实现贪吃蛇...
首先,我们需要了解`JTable`,这是Swing中的一个核心组件,用于展示二维表格数据。在本Demo中,`JTable`被用来显示商品列表,每行代表一个商品,列可能包括商品名称、单价、数量等信息。 要实现在`JTable`中增加...
这个“Java基于Swing实现的简单聊天室,支持多人在线闲谈.zip”文件是一个示例项目,展示了如何利用Swing构建一个基本的多用户聊天应用。下面将详细阐述其涉及的关键知识点。 1. **Swing组件**:Swing提供了丰富的...
本项目"java swing写的聊天软件"利用了Swing组件来设计和实现了一个能够支持多达1000个用户同时在线的聊天应用。以下是关于这个聊天软件的关键知识点和实现细节: 1. **Swing组件库**:Swing 提供了丰富的组件,如...
8. Java swing组件的使用:Java swing组件可以用于创建各种图形化用户界面,例如计算器、游戏、聊天软件等。 9. 计算器的实现:计算器是Java swing组件中的一种常见应用,通过使用JFrame、JButton、JPanel、...
java小游戏 (源码)swing五子棋源代码java小游戏 (源码)swing五子棋源代码java小游戏 (源码)swing五子棋源代码java小游戏 (源码)swing五子棋源代码java小游戏 (源码)swing五子棋源代码java小游戏 (源码)swing五子棋源...
标题中的“Swing写的一个简易记事小软件”指的是使用Java Swing库开发的一款简单应用程序,主要用于记录日常事项。Swing是Java提供的一种图形用户界面(GUI)工具包,它允许开发者创建桌面应用,包括窗口、按钮、...
"java 截屏 swing"这个主题涉及到的是如何利用Swing来实现屏幕截图功能。在这个项目中,开发人员创建了一个应用程序,允许用户选择屏幕上的任意矩形区域进行截图,未被选中的部分会显示为阴影效果,同时支持拖动和...
本项目是一套Java swing实现的一款餐厅点餐系统,主要针对计算机相关专业的正在做bishe的学生和需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本等,该项目可以直接作为bishe使用。 项目都经过严格调试,...
【Java Swing制作的通讯录软件与SQL数据库连接】 在编程领域,Java Swing 是一个用于创建图形用户界面(GUI)的工具包,它提供了丰富的组件和功能,使得开发者能够构建出功能完善的桌面应用。本项目是一个基于Java ...
Java Swing MySQL实现的酒店管理系统项目源码是一款基于Java图形用户界面(GUI)库Swing和关系型数据库管理系统MySQL开发的应用程序。此系统旨在为酒店提供一套全面的后台管理解决方案,涵盖了酒店日常运营中的核心...