- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Java实现的可选择及拖拽图片的面板功能【基于swing组件】由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
本文实例讲述了java实现的可选择及拖拽图片的面板功能。分享给大家供大家参考,具体如下:
今天在论坛上看到帖子希望能在 swing 中实现像拖地图一样拖拽图片。这里是一个最简单的实现,提供了一个基本思路.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
import
javax.swing.*;
import
javax.swing.filechooser.filenameextensionfilter;
import
java.awt.*;
import
java.awt.event.mouseevent;
import
java.awt.event.mouselistener;
import
java.awt.event.mousemotionlistener;
import
java.io.file;
/**
* 在窗体上拖拽图片。使用方法:双击窗体空白处将会弹出打开图片对话框。打开图片后可以在窗体上拖拽图片。
*/
@suppresswarnings
(
"serial"
)
public
class
dragingframe
extends
jframe {
/**
* 构造函数
*
* @throws headlessexception ???
*/
public
dragingframe()
throws
headlessexception {
this
.setdefaultcloseoperation(exit_on_close);
getcontentpane().setlayout(
new
borderlayout());
getcontentpane().add(
new
imagepanel(), borderlayout.center);
}
// 程序入口
public
static
void
main(string[] args)
throws
exception {
uimanager.setlookandfeel(uimanager.getsystemlookandfeelclassname());
dragingframe frame =
new
dragingframe();
frame.setsize(
400
,
300
);
frame.setlocation(
300
,
300
);
frame.setresizable(
false
);
frame.settitle(
"www.zzvips.com 双击打开图片,然后拖拽"
);
frame.setvisible(
true
);
}
}
/**
* 能够拖拽图片的面板
*/
@suppresswarnings
(
"serial"
)
class
imagepanel
extends
jpanel {
private
dragstatus status = dragstatus.ready;
// 拖拽状态
private
image image;
// 要显示的图片
private
point imageposition =
new
point(
0
,
0
),
// 图片的当前位置
imagestartposition =
new
point(
0
,
0
),
// 每次拖拽开始时图片的位置(也就是上次拖拽后的位置)
mousestartposition;
// 每次拖拽开始时鼠标的位置
imagepanel() {
addmouselistener(
new
mouselistener() {
// 双击鼠标时打开图片
public
void
mouseclicked(mouseevent e) {
if
(e.getclickcount() ==
2
) {
openimage();
}
}
// 按下鼠标时,更改状态,并且记录拖拽起始位置。
public
void
mousepressed(mouseevent e) {
if
(status == dragstatus.ready) {
status = dragstatus.dragging;
mousestartposition = e.getpoint();
imagestartposition.setlocation(imageposition.getlocation());
}
}
// 松开鼠标时更改状态
public
void
mousereleased(mouseevent e) {
if
(status == dragstatus.dragging) {
status = dragstatus.ready;
}
}
public
void
mouseentered(mouseevent e) {
}
public
void
mouseexited(mouseevent e) {
}
});
addmousemotionlistener(
new
mousemotionlistener() {
// java 有拖拽事件,在这个事件中移动图片位置
public
void
mousedragged(mouseevent e) {
if
(status == dragstatus.dragging) {
moveimage(e.getpoint());
}
}
public
void
mousemoved(mouseevent e) {
}
});
}
/**
* 移动图片。实际上画图工作在 paintcomponent() 中进行,这里只是计算图片位置,然后调用该方法。
*
* @param point 当前的鼠标位置
*/
private
void
moveimage(point point) {
// 图片的当前位置等于图片的起始位置加上鼠标位置的偏移量。
imageposition.setlocation(
imagestartposition.getx() + (point.getx() - mousestartposition.getx()),
imagestartposition.gety() + (point.gety() - mousestartposition.gety())
);
repaint();
}
// 打开图片
private
void
openimage() {
system.out.println(
"opening image..."
);
file file = createfilechooser().getselectedfile();
if
(file !=
null
) {
image = toolkit.getdefaulttoolkit().getimage(file.getabsolutepath());
if
(image !=
null
) {
this
.repaint();
}
}
}
// 创建打开文件对话框
private
jfilechooser createfilechooser() {
jfilechooser chooser =
new
jfilechooser();
chooser.setdialogtitle(
"请选择图片文件..."
);
chooser.addchoosablefilefilter(
new
filenameextensionfilter(
"常用图片格式"
,
"jpg"
,
"jpeg"
,
"gif"
,
"png"
));
chooser.showopendialog(
this
);
return
chooser;
}
@override
protected
void
paintcomponent(graphics g) {
super
.paintcomponent(g);
if
(image !=
null
) {
g.drawimage(image, (
int
) imageposition.getx(), (
int
) imageposition.gety(),
this
);
}
}
private
enum
dragstatus {
ready, dragging
}
}
|
运行效果:
希望本文所述对大家java程序设计有所帮助.
原文链接:http://blog.csdn.net/yidinghe/article/details/3890410 。
最后此篇关于Java实现的可选择及拖拽图片的面板功能【基于swing组件】的文章就讲到这里了,如果你想了解更多关于Java实现的可选择及拖拽图片的面板功能【基于swing组件】的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在构建一个 RCP 应用程序,其中每个季度都会更新功能/插件。因此,如果用户选择自动更新功能/插件,则会下载更新插件的新 jar,但旧插件仍在使用我不再使用的磁盘空间。 我厌倦了删除包含旧 jar
我如何从外部 Controller 功能中调用 Controller 内部的功能,例如电话间隙回调功能 这是 Controller 外部定义的功能 function onDeviceReady()
如果某个功能(例如 MediaSource)可用,我如何使用 Google Dart 检查。 new MediaSource() 抛出一个错误。如何以编程方式检查此类或功能是否存在?有任何想法吗?是否
我正在尝试运行 Azure Orchestrations,突然我开始从 statusQueryGetUri 收到错误: 协调器函数“UploadDocumentOrchestrator”失败:函数“U
我见过 iPhone 上的应用程序,如果在 3.0 上运行,将使用 3.0 功能/API,例如应用内电子邮件编辑器,如果在 2.x 上运行,则不使用这些功能,并退出应用程序以启动邮件相反。 这是怎么做
这是 DB 规范化理论中的一个概念: Third normal form is violated when a non-key field is a fact about another non-ke
如果我定义 #if SOMETHING #endif 而且我还没有在任何地方定义 SOMETHING。 #if 中的代码会编译吗? 最佳答案 当#if的参数表达式中使用的名称未定义为宏时(在所有其他宏
我刚刚澄清了 A* 路径查找应该如何在两条路径具有相等值的 [情况] 下运行,无论是在计算期间还是在结束时,如果有两条相等的短路径。 例如,我在我的起始节点,我可以扩展到两个可能的节点,但它们都具有相
Java有没有类似下面的东西 宏 一种遍历所有私有(private)字段的方法 类似于 smalltalk symbols 的东西——即用于快速比较静态字符串的东西? 请注意,我正在尝试为 black
这个程序应该将华氏度转换为摄氏度: #include int main() { float fahrenheit, celsius; int max, min, step;
当打开PC缓存功能后, 软件将采用先进先出的原则排队对示波器采集的每一帧数据, 进行帧缓存。 当发现屏幕中有感兴趣的波形掠过时, 鼠标点击软件的(暂停)按钮, 可以选择回看某一帧的波形
我有一个特殊的(虚拟)函数,我想在沙盒环境中使用它: disable.system.call eval(parse(text = 'model.frame("1 ~ 1")'), envir = e
使用新的 Service 实现,我是否必须为我的所有服务提供一个 Options 方法? 使用我的所有服务当前使用的旧 ServiceBase 方法,OPTIONS 返回 OK,但没有 Access-
我正在阅读 Fogus 的关于 Clojure 的喜悦的书,在并行编程章节中,我看到了一个函数定义,它肯定想说明一些重要的事情,但我不知道是什么。此外,我看不到这个函数有什么用 - 当我执行时,它什么
我有大量的 C 代码,大部分代码被注释掉和/或 #if 0。当我使用 % 键匹配 if-else 的左括号和右括号时,它也匹配注释掉的代码。 有没有办法或vim插件在匹配括号时不考虑注释掉或#if 0
我有这个功能: map(map(fn x =>[x])) [[],[1],[2,3,4]]; 产生: val it = [[],[[1]],[[2],[3],[4]]] 我不明白这个功能是如何工作的。
我使用 Visual Studio 代码创建了一个函数应用程序,然后发布了它。功能应用程序运行良好。我现在在功能门户中使用代码部署功能(KUDU)并跳过构建。下面是日志 9:55:46 AM
我有一个数据框df: userID Score Task_Alpha Task_Beta Task_Charlie Task_Delta 3108 -8.00 Easy Easy
我真的无法解决这个问题: 我有一个返回数据框的函数。但是,数据框仅打印在我的控制台中,尽管我希望将其存储在工作空间中。我怎样才能做到这一点? 样本数据: n <- 32640 t <- seq(3*p
有没有办法找出所有可能的激活器命令行选项? activator -help仅提供最低限度的可用选项/功能列表,但所有好的东西都隐藏起来,即使在 typesafe 网站在线文档中也不可用。 到目前为止,
我是一名优秀的程序员,十分优秀!