Swing小技巧总结
1. 使JDialog位于屏幕的中央
public void setToScreenCenter(JDialog jd) {
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = jd.getSize();
if (frameSize.height > screenSize.height) {
frameSize.height = screenSize.height;
}
if (frameSize.width > screenSize.width) {
frameSize.width = screenSize.width;
}
jd.setLocation((screenSize.width - frameSize.width) / 2,(screenSize.height - frameSize.height) / 2);
}
2.为JDialog增加图片背景
public class MySwingTest extends JDialog{
private JPanel panelContent;
private BufferedImage image;
private Graphics g;
private Image srcImage;
String imageURL = "C:/NMS/PLATFORM/NNM5/client/resource/symbols/background/background.gif";
public MySwingTest(){
image = new BufferedImage(1200, 760, BufferedImage.TYPE_3BYTE_BGR);
image.flush();
g = image.getGraphics();
try {
srcImage = ImageIO.read(new File(imageURL));
} catch (IOException e) {
e.printStackTrace();
}
g.drawImage(srcImage,0,0, null);
init();
}
private void init(){
this.setMinimumSize(new Dimension(700, 560));
this.setMaximumSize(new Dimension(700, 560));
/*try {//这样加载的是一个图片,而不是将图片作为背景
ImageIcon icon = new ImageIcon(image);
JLabel label = new JLabel(icon);
label.setBounds(0, 0, icon.getIconWidth(), icon.getIconHeight());
panelContent.add(label);
g.dispose();
}catch (Exception e) {
e.printStackTrace();
}*/
panelContent = new NewPanel();
this.setContentPane(panelContent);
this.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
setToScreenCenter(this);
this.setVisible(true);
}
public void setToScreenCenter(JDialog jd) {//上面的方法
}
public static void main(String [] args){
MySwingTest mst = new MySwingTest();
}
class NewPanel extends JPanel {
public NewPanel() {
}
public void paintComponent(Graphics g) {
int x = 0, y = 0;
ImageIcon icon = new ImageIcon(image);
g.drawImage(icon.getImage(), x, y, getSize().width,getSize().height, this);
while (true) {
g.drawImage(icon.getImage(), x, y, this);
if (x > getSize().width && y > getSize().height)
break;
// 这段代码是为了保证在窗口大于图片时,图片仍能覆盖整个窗口
if (x > getSize().width) {
x = 0;
y += icon.getIconHeight();
} else
x += icon.getIconWidth();
}
g.drawString("abcdefg", 200, 200);//在图片的特定位置加上文字
}
}
}
3.文字旋转显示
public class Rotate {
public static void main(String[] args) {
JFrame jf = new JFrame();
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.getContentPane().add(new RotatePanel());
jf.setPreferredSize(new Dimension(500, 400));
jf.pack();
jf.setVisible(true);
}
}
class RotatePanel extends JPanel {
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.WHITE);
g2d.fillRect(0, 0, this.getWidth(), this.getHeight());
String s = "Java 2d 旋转";
Font f = new Font("宋体", Font.BOLD, 16);
Color[] colors = { Color.ORANGE, Color.LIGHT_GRAY };
g2d.setFont(f);
// 平移原点到图形环境的中心
g2d.translate(this.getWidth() / 2, this.getHeight() / 2);
// 旋转文本
for (int i = 0; i < 12; i++) {
g2d.rotate(30 * Math.PI / 180);
g2d.setPaint(colors[i % 2]);
g2d.drawString(s, 0, 0);
}
}
}
4.BufferedImage处理图像
BufferedImage是Image的一个子类,BufferedImage生成的图片在内存里有一个图像缓冲区,利用这个缓冲区我们可以很方便的操作这个图片,通常用来做图片修改操作如大小变换、图片变灰、设置图片透明或不透明等。
BufferedImage bufferedImage = ImageIO.read(new FileInputStream(filePath));
public BufferedImage getGrayPicture(BufferedImage originalImage)
{
int green=0,red=0,blue=0,rgb;
int imageWidth = originalImage.getWidth();
int imageHeight = originalImage.getHeight();
for(int i = originalImage.getMinX();i < imageWidth ;i++){
for(int j = originalImage.getMinY();j < imageHeight ;j++){
//图片的像素点其实是个矩阵,这里利用两个for循环来对每个像素进行操作
Object data = routeImage.getRaster().getDataElements(i, j, null);//获取该点像素,并以object类型表示
red = routeImage.getColorModel().getRed(data);
blue = routeImage.getColorModel().getBlue(data);
green = routeImage.getColorModel().getGreen(data);
red = (red*3 + green*6 + blue*1)/10;
green = red;
blue = green;
/*
这里将r、g、b再转化为rgb值,因为bufferedImage没有提供设置单个颜色的方法,只能设置rgb。rgb最大为8388608,当大于这个值时,应减去 255*255*25516777216
*/
rgb = (red*256 + green)*256+blue;
if(rgb>8388608){
rgb = rgb - 16777216;
}
//将rgb值写回图片
routeImage.setRGB(i, j, rgb);
}
}
return originalImage;
}
Swing小技巧总结的更多相关文章
- 前端网络、JavaScript优化以及开发小技巧
一.网络优化 YSlow有23条规则,中文可以参考这里.这几十条规则最主要是在做消除或减少不必要的网络延迟,将需要传输的数据压缩至最少. 1)合并压缩CSS.JavaScript.图片,静态资源CDN ...
- Git小技巧 - 指令别名及使用Beyond Compare作为差异比较工具
前言 本文主要写给使用命令行来操作Git的用户,用于提高Git使用的效率.至于使用命令还是GUI(Tortoise Git或VS的Git插件)就不在此讨论了,大家根据自己的的喜好选择就好.我个人是比较 ...
- 分享两个BPM配置小技巧
1.小技巧 流程图修改后发布的话版本号会+1,修改次数多了之后可能会导致版本号很高,这个时候可以将流程导出,然后删除对应的流程包再导入,发布数据模型和流程图之后,版本清零 2.小技巧 有的同事入职后使 ...
- linux系统维护时的一些小技巧,包括系统挂载新磁盘的方法!可收藏!
这里发布一些平时所用到的小技巧,不多,不过会持续更新.... 1.需要将history创建硬链接ln 全盘需要备份硬链接 ln /etc/xxx /home/xxx 2.root用户不可以远程 /et ...
- JS处理事件小技巧
今天,就分享一下我自己总结的一些JS的小技巧: ①防止鼠标选中事件 <div class="mask" onselectstart="return false&qu ...
- iOS:小技巧(不断更新)
记录下一些不常用技巧,以防忘记,复制用. 1.获取当前的View在Window的frame: UIWindow * window=[[[UIApplication sharedApplication] ...
- css小技巧(1)
1.-webkit-overflow-scrolling: touch; 解决ios滑动时无缓冲问题 2.::-webkit-scrollbar 设置ios滑动时是否显示滚动条 3.::selecti ...
- 最强 Android Studio 使用小技巧和快捷键
写在前面 本文翻译自 Android Studio Tips by Philippe Breault,一共收集了62个 Android Studio 使用小技巧和快捷键. 根据这些小技巧的使用场景,本 ...
- ios开发中的小技巧
在这里总结一些iOS开发中的小技巧,能大大方便我们的开发,持续更新. UITableView的Group样式下顶部空白处理 //分组列表头部空白处理 UIView *view = [[UIViewal ...
随机推荐
- sublime text 3如何安装插件
原博客地址:http://blog.csdn.net/weixin_40682842/article/details/78727266 我自己的部分操作如下: 学习Sublime Text扩展插件的安 ...
- 教你如何解决Sublime Text 3使用中出现的中文乱码问题
Sublime Text 3 是一个非常不错的源代码及文本编辑器,但是不支持GB2312和GBK编码在很多情况下会非常麻烦. 不过Sublime Package Control所提供的插件可以让Sub ...
- Nginx安装手册
前提是搭建yum安装环境,见前面的教程资料 Nginx安装手册1 nginx安装环境 nginx是C语言开发,建议在linux上运行,本教程使用Centos6.5作为安装环境. gcc 安装ngin ...
- HDU 5912 Fraction(模拟——分子式化简求解)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5912 Problem Description Mr. Frog recently studied h ...
- java中static关键字的继承问题
结论:java中静态属性和静态方法可以被继承,但是没有被重写(overwrite)而是被隐藏. 原因: 1). 静态方法和属性是属于类的,调用的时候直接通过类名.方法名完成对,不需要继承机制及可以调用 ...
- Yourphp是一款完全开源免费的.核心采用了Thinkphp框架
Yourphp企业网站管理系统,是一款完全开源免费的PHP+MYSQL系统.核心采用了Thinkphp框架,同时也作为开源软件发布.集众多开源项目于一身的特点,使本系统从安全,效率,易用及可扩展性上更 ...
- nginx版本如何选择?
生产环境使用Stable version:最新稳定版,现在最新的版本是nginx-1.8.1 注意各版本的区别:Nginx官网提供了三个类型的版本 1.Mainline version:Mainlin ...
- Python调用外部程序——os.system()和subprocess.call
通过os.system函数调用其他程序 预备知识:cmd中打开和关闭程序 cmd中打开程序 a.打开系统自带程序 系统自带的程序的路径一般都已加入环境变量之中,只需在cmd窗口中直接输入程序名称即可. ...
- Docker 创建ubuntu ,ssh,vnc 可连接
**************************************************************************************************** ...
- [one day one question] Vue单页面应用如何保证F5强刷不清空数据
问题描述: Vue单页面用按F5强刷,数据就恢复初始了,这怎么破? 解决方案: store.subscribe((mutation, state) => { sessionStorage.set ...