1. 所有的Swing组件必须由时间调度线程(event dispatch thread)进行配置,线程将鼠标点击和键盘敲击控制转移到用户接口组件。下面的代码片段是事件调度线程中的执行代码:
  1. EventQueue.invokeLater(new Runnable(){
  2. public void run(){
  3. statements
  4. }
  5. });

注释:主线程中完成Swing程序初始化无法保证这种方式的安全性,虽然发生错误的概率非常小。

根据屏幕分辨率重置框架的大小
调用Toolkit类的静态方法getDefaultToolkit得到一个Toolkit对象(Toolkit类包含很多与本地窗口系统打交道的方法)。然后,调用getScreenSize方法,这个方法以Dimension对象的形势返回屏幕的大小。Dimension对象同时用公有实例变量width和height保存着屏幕的宽度和高度。下面是相关代码:

  1. Toolkit kit = Toolkit.getDefaultToolkit();
  2. Dimension screenSize = kit.getScreenSize();
  3. int screenWidth = screenSize.width;
  4. int screenHeight = screenSize.height;
  1. 下面,将框架大小设定为上面取值的50%,然后告知窗口系统定位框架
  1. setSize(screenWidth/2,screenHeight/2);
  2. setLocationByPlatform(true);

绘制几何图形

  1. import java.awt.EventQueue;
  2. import javax.swing.JFrame;
  3. public class DrawTest {
  4. public static void main(String[] args) {
  5. EventQueue.invokeLater(new Runnable() {
  6. public void run() {
  7. JFrame frame = new DrawFrame();
  8. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  9. frame.setVisible(true);
  10. }
  11. });
  12. }
  13. }
  14. import java.awt.Component;
  15. import java.awt.Dimension;
  16. import java.awt.Toolkit;
  17. import javax.swing.JFrame;
  18. public class DrawFrame extends JFrame {
  19. public DrawFrame() {
  20. setTitle("DrawTest");
  21. // setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
  22. Toolkit toolkit = Toolkit.getDefaultToolkit();
  23. Dimension screenSize = toolkit.getScreenSize();
  24. int screenWidth =screenSize.width;
  25. int screenHeight = screenSize.height;
  26. setSize(screenWidth/2, screenHeight/2);
  27. setLocationByPlatform(true);
  28. component = new DrawComponent();
  29. add(component);
  30. }
  31. private Component component;
  32. public static final int DEFAULT_WIDTH = 400;
  33. public static final int DEFAULT_HEIGHT = 400;
  34. }
  35. import java.awt.Dimension;
  36. import java.awt.Graphics;
  37. import java.awt.Graphics2D;
  38. import java.awt.Toolkit;
  39. import java.awt.geom.Ellipse2D;
  40. import java.awt.geom.Line2D;
  41. import java.awt.geom.Rectangle2D;
  42. import javax.swing.JComponent;
  43. public class DrawComponent extends JComponent {
  44. public void paintComponent(Graphics g) {
  45. Graphics2D g2 = (Graphics2D) g;
  46. //根据屏幕分辨率设置框架大小
  47. Toolkit toolkit = Toolkit.getDefaultToolkit();
  48. Dimension screenSize = toolkit.getScreenSize();
  49. int screenWidth = screenSize.width;
  50. int screenHeight = screenSize.height;
  51. //根据屏幕分辨率设置组件位置
  52. double leftX = screenWidth / 4 - 100;
  53. double topY = screenHeight / 4 - 75;
  54. double width = 200;
  55. double height = 150;
  56. //画一个矩形
  57. Rectangle2D rec = new Rectangle2D.Double(leftX, topY, width, height);
  58. g2.draw(rec);
  59. //画一个rec矩形的内切椭圆
  60. Ellipse2D ellipse = new Ellipse2D.Double();
  61. ellipse.setFrame(rec);
  62. g2.draw(ellipse);
  63. //画rec矩形的对角线
  64. g2.draw(new Line2D.Double(leftX, topY, leftX + width, topY + height));
  65. //画一个以rec矩形中心为圆心的圆
  66. double centerX = rec.getCenterX();
  67. double centerY = rec.getCenterY();
  68. double radius = 150;
  69. Ellipse2D circle = new Ellipse2D.Double();
  70. circle.setFrameFromCenter(centerX, centerY, centerX + radius, centerY + radius);
  71. g2.draw(circle);
  72. }
  73. }

以上内容根据《java核心技术卷I:基础知识》编写

GUI矩形、椭圆、线、框架的更多相关文章

  1. opencv鼠标操作及GUI矩形绘画

    OpenCV的鼠标操作是通过一个中介函数配合回调函数来实现的.指定鼠标操作消息回调函数的函数为SetMouseCallback. void setMouseCallback(const string& ...

  2. 使用Flex4画图形:圆、矩形、线

    <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="ht ...

  3. 【QT学习】QT GUI应用程序的框架,文件分析

    有几个名字,项目名,类名,界面对象名. 1.项目文件 项目名.pro(MyHelloQt.pro) 主要包括项目用到的模块,项目包含哪些源码文件,头文件,窗体文件,生成应用程序的名称. 由QT自动生成 ...

  4. 18 Ui美化

    资源文件的使用: 一: res中文件中放置的文件类型: res/drawable//放处理过的图片 res/drawable-XXX //放的Ui切得图 >res/anim 放动画 >re ...

  5. Android项目实战_手机安全卫士拦截骚扰

    ###1.骚扰拦截需求分析1.界面1.1 黑名单列表界面1.2 添加黑名单界面2.功能2.1 黑名单的添加.删除2.2 拦截电话2.3 拦截短信 ###2.黑名单数据库的创建1.分析需要的字段id 主 ...

  6. Linux图像系统框架-理解X11与Qt的层次结构

    转:http://blog.csdn.net/kjfureone/article/details/52848550 1. 前言 图形子系统是linux系统中比较复杂的子系统之一:对下,它要管理形态各异 ...

  7. [P1169] 棋盘制作 &悬线法学习笔记

    学习笔记 悬线法 最大子矩阵问题: 在一个给定的矩形中有一些障碍点,找出内部不包含障碍点的,边与整个矩形平行或重合的最大子矩形. 极大子矩型:无法再向外拓展的有效子矩形 最大子矩型:最大的一个有效子矩 ...

  8. Lodop打印设计矩形重合预览线条变粗

    LODOP中的打印设计是辅助进行开发的,实际打印效果应以预览为准,很多效果都是在设计界面显示不出来,或设计和预览界面有差异.例如add_print_text文本的字间距.行间距,旋转,还有允许标点溢出 ...

  9. 国庆大礼包:2014年最全的ANDROID GUI模板和线框图免费下载

    距离上次分享GUI模板有很长时间了,这段时间里设计趋势不断变化,谷歌推出了最新的Android L以及全新的界面设计,UI设计师又有得忙了,今天收集了一组实用的GUI模板和线框图,包含最新的Andro ...

随机推荐

  1. HDU 2955 Robberies(01背包)

    Robberies Problem Description The aspiring Roy the Robber has seen a lot of American movies, and kno ...

  2. jQuery中的方法

    jQuery中的方法来操作HTML标签中的属性 attr(name)    获取当前对象的指定的属性的值 attr(key,value)  给当前对象设置属性值 attr(properties)  一 ...

  3. HDU 3499 Flight spfa+dp

    Flight Time Limit : 20000/10000ms (Java/Other)   Memory Limit : 65535/65535K (Java/Other) Total Subm ...

  4. A. Launch of Collider Codeforces Round #363 (Div2)

    A. Launch of Collider time limit per test 2 seconds memory limit per test 256 megabytes input standa ...

  5. scanf函数与scanf_s函数

    ANSI C中没有scanf_s(),只有scanf(),scanf()在读取时不检查边界,所以可能会造成内存泄露.所以vc++2005/2008中提供了scanf_s(),在最新的VS2013中也提 ...

  6. 《JS权威指南学习总结--1.2客户端JS》

    1.2客户端JS --本节讲述客户端JS部分各章节的讲述内容 一.第十三章讲述JS代码通过<script>标签来嵌入到HTML文件中. 二.第十四章讲解WEB浏览器脚本技术,并涵盖客户端J ...

  7. hdu_5800_To My Girlfriend(变种背包)

    题目链接:hdu_5800_To My Girlfriend 题意: 给你n和物品和一个重量m,让你求 题解: To My Girlfriend 令dp[i][j][s1][s2]表示前i个物品填了j ...

  8. svnserve: E000098: 不能绑定服务器套接字: 地址已在使用

    百度一下,所有资料都是 1.查找出目前正在使用的svnserve进程,然后kill掉 ps -aux | grep svnserve kill -9  xxx    // xxx代表svnserve对 ...

  9. 15分钟快速开发一个kissy组件(流程篇)

    Step1: 安装kissy gallery组件工具 npm install yo grunt-cli -g npm install generator-kissy-gallery -g 请确保本地带 ...

  10. IE11中的F12无效的问题

    最近做的一个项目中,h5中的video标签IE11在有的机器上兼容,有的机器上不兼容,很是让人头疼.将IE卸载后重装又发现最新的IE11中F12开发者工具失效.面对F12失效的问题,具体解决办法如下: ...