社区
Java SE
帖子详情
java 画图的问题!
lwtprogress
2010-03-24 07:59:50
我想利用java画一个棋盘格,完成了,但是测试的时候有点不够满意。就是我是在paint()方法中画的,每次更新都会有repaint()。这时候会重复调用paint方法,也就是棋盘要被画很多遍,虽然图像不会改变,感觉很别扭。有没有方法可以只画一次棋盘。
...全文
94
6
打赏
收藏
java 画图的问题!
我想利用java画一个棋盘格,完成了,但是测试的时候有点不够满意。就是我是在paint()方法中画的,每次更新都会有repaint()。这时候会重复调用paint方法,也就是棋盘要被画很多遍,虽然图像不会改变,感觉很别扭。有没有方法可以只画一次棋盘。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
lwtprogress
2010-03-25
打赏
举报
回复
我想到到一个方法:设定一个flag=ture,当读完一遍之后就设为FALSE。在要只读一遍的图上加上if语句就ok。
谢谢大家,我有时间再看看各楼的观点吧!
wyang1991
2010-03-24
打赏
举报
回复
[Quote=引用 4 楼 afunx 的回复:]
建议楼主可以采用双缓冲技术,应用BufferedImage类,把要画的图像先放入这个类中,在从这个类读到画板上。我最近在看的一本JAVA游戏编程书采用的就是这种方法。
[/Quote]
这楼说得对!
afunx
2010-03-24
打赏
举报
回复
建议楼主可以采用双缓冲技术,应用BufferedImage类,把要画的图像先放入这个类中,在从这个类读到画板上。我最近在看的一本JAVA游戏编程书采用的就是这种方法。
niulei190922
2010-03-24
打赏
举报
回复
以下是绘制表盘的代码 2D做的:
import java.awt.geom.Ellipse2D;
import java.awt.geom.Line2D;
import java.util.Date;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class TimeDemo extends JFrame{
private JPanel pan;
private double r1=160,r2=165,rm1=158,rm2=167,hr=100,mr=130,sr=167;
public TimeDemo(){
super("Time demo");
this.setBounds(200,200,410,430);
getMinLab();
pan=new MyPanel();
this.add(pan);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
MyThread th=new MyThread();
th.setDaemon(true);
th.start();
}
public static void main(String[] args) {
new TimeDemo();
}
class MyPanel extends JPanel{
public void paint(Graphics g){
g.clearRect(0,0,this.getWidth(),this.getHeight());
Graphics2D g2=(Graphics2D)g;
BasicStroke bs=null;
// String num[]={"1","2","3","4","5","6","7","8","9","10","11","12"};
// 打开抗锯齿
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
Line2D line[]=getMinLab();
for(int i=0;i<line.length;i++){
bs=new BasicStroke(2,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND);
g2.setStroke(bs);
if(i%5==0){
bs=new BasicStroke(4,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND);
g2.setStroke(bs);
}
g2.draw(line[i]);
}
//计算时针
Date date=new Date();
int s=date.getSeconds();
double m=date.getMinutes()+s/60.0;
double h=date.getHours()+m/60.0;
System.out.println(h);
double hy=Math.sin(Math.PI/6*(h%12-3))*hr+200;
double hx=Math.cos(Math.PI/6*(h%12-3))*hr+200;
bs=new BasicStroke(6,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND);
g2.setStroke(bs);
Line2D.Double hline=new Line2D.Double(200,200,hx,hy);
g2.draw(hline);
// 计算分针
double my=Math.sin(Math.PI/30*(m-15))*mr+200;
double mx=Math.cos(Math.PI/30*(m-15))*mr+200;
bs=new BasicStroke(4,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND);
g2.setStroke(bs);
Line2D.Double mline=new Line2D.Double(200,200,mx,my);
g2.draw(mline);
// 计算秒针
double sy=Math.sin(Math.PI/30*(s-15))*sr+200;
double sx=Math.cos(Math.PI/30*(s-15))*sr+200;
bs=new BasicStroke(2,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND);
g2.setStroke(bs);
Line2D.Double sline=new Line2D.Double(200,200,sx,sy);
g2.draw(sline);
//画表盘
Ellipse2D.Double el=new Ellipse2D.Double(10,10,380,380);
g2.draw(el);
}
}
public Line2D[] getMinLab(){
Line2D[] lineM=new Line2D[60];
for(int i=0;i<lineM.length;i++){
double x1,y1,x2,y2;
double b1 = Math.sin(Math.PI / 30 * i);
double b2 = Math.cos(Math.PI / 30 * i);
if (i % 5 != 0) {
y1 = b1 * r1 + 200;
y2 = b1 * r2 + 200;
x1 = b2 * r1 + 200;
x2 = b2 * r2 + 200;
} else {
y1 = b1 * rm1 + 200;
y2 = b1 * rm2 + 200;
x1 = b2 * rm1 + 200;
x2 = b2 * rm2 + 200;
}
lineM[i]=new Line2D.Double(x1,y1,x2,y2);
// System.out.println(i+"-------("+x1+","+y1+"),("+x2+","+y2+")");
}
return lineM;
}
class MyThread extends Thread{
public void run(){
while(true){
pan.repaint();
try {
this.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
// public void refresh(){
// pan.repaint();
// this.validate();
// }
}
无水杯
2010-03-24
打赏
举报
回复
路过,,想法很好,打算用java2D来做么?
lwtprogress
2010-03-24
打赏
举报
回复
当然要求棋盘式始终显示的!!
java
画笔 粗细_
java
画图
板画笔粗细的
问题
,急~~~~~高手速来帮忙改改!
这篇博客介绍了一个
Java
应用程序,该程序创建了一个图形界面用于
画图
。它包含了一个`DrawFrame`类用于设置窗口,一个`DrawPanel`类实现了监听器,支持鼠标事件和动作,允许用户选择颜色和画笔样式在画布上绘图。此外,博客还定义了一个`Position`类用于存储坐标信息。整个应用展示了
Java
AWT和Swing库在图形用户界面和事件处理中的应用。
Java
项目——
画图
软件
本文介绍了如何从零开始构建一个类似Windows系统自带的
画图
工具,涵盖了设置画笔粗细、颜色选择、背景颜色、绘制、橡皮擦、简笔画窗口等功能。通过逐步添加组件、监听器和实现各种功能,最终完成了一个具备基本绘图能力的程序。
Java
:
画图
工具
本文介绍了使用
Java
简单模拟
画图
工具的实现过程。包括设计
画图
工具界面,添加功能按钮、画笔,重写监听器方法等步骤。通过创建窗体、面板,添加按钮并设置监听器,获取鼠标动作信息,实现了
画图
、矩形、多边形绘制及橡皮擦等功能,还可按需完善代码。
Java
画图
软件制作
本文介绍了一款使用
Java
Swing开发的简易电脑
画图
软件。该软件支持多种绘图功能,如画笔、橡皮擦、喷漆等,并能选择不同的颜色、线条粗细及字体样式。文中详细展示了软件的实现代码。
用
JAVA
制作一个
画图
程序
本文介绍如何使用
JAVA
编程创建一个具备画笔选择、背景颜色更换、画笔颜色更改、清除画布、橡皮擦及添加图片水印功能的
画图
程序。通过实例代码展示各个功能的实现,鼓励读者动手实践,体验编程带来的艺术创作乐趣。
Java SE
62,621
社区成员
307,251
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章