「java设置画布大小」画布大小怎么设置
今天给各位分享java设置画布大小的知识,其中也会对画布大小怎么设置进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、能帮我分析这个JAVA程序么?
- 2、JAVA 实现打印用什么方法?
- 3、JAVA 改变Canvas画布尺寸
- 4、java中我如何获取时区?
- 5、求解答以下的java源代码,详细点,说明这个程序的设计思路,还有比如运用了多线程的话运用了多线程的什么
能帮我分析这个JAVA程序么?
哥们,你真执着啊,每个句子都注释,别那么不自信。
我试着解释清楚,但水平有限,还是不能贯通起来。
哪里弄来的程序,错误蛮多!java是区分大小写的,另外,变量和方法的定义也有一些大家默认的规则,组合名字的方法为先小写在跟大写,如
c.setBackground(Color.green);
而不是
c.setbackground(Color.green);
类名基本都是大写:MyCanvas2
c就很好,Mycanvas2
c是不存在的。
下面是我修改过的代码,编译过了,可以运行。另外附上html:
html
head
titleMyCanvas/title
/head
applet
code="Canvas4_4.class"
width=300
height=300
/applet
/html
放在一个目录下,appletviewer+xx.html即可。
import
java.applet.Applet;
//导入程序包。applet程序,没法多说
import
java.awt.*;
//如果不是我错了,这里应该是awt
import
java.awt.event.*;
import
java.util.Vector;
public
class
Canvas4_4
extends
Applet
implements
ActionListener{
Button
line,point,clear;
MyCanvas2
c;
//继承自画布的对象
public
void
init(){
//初始化applet
c=new
MyCanvas2();
//创建画布对象
c.setSize(400,200);
//设置画布大小、背景色(绿色)
c.setBackground(Color.green);
line=new
Button("画线");
//按钮,分别写着“画线'、画点、清除
point=new
Button("画点");
clear=new
Button("清除");
add(line);
//往applet中增加这三个按钮,和画布,你默认的布局管理器是FlowLayout,所以如果界面不是太大,按钮应该是一字排开,下面是画布
add(point);
add(clear);
add(c);
line.addActionListener(this);
//为三个按钮增加监听器,以监听点击他们所触发的事件
point.addActionListener(this);
clear.addActionListener(this);
}
public
void
actionPerformed(ActionEvent
e){//前面声明实现了ActionListener接口,
//这个抽象方法是一定要实现的。
if(e.getSource()==line)
//对触发事件的对象进行辨别,以确定是画直线、画点、还清除
c.mode=0;
//mode标志,为0画线,为1画点
else
if(e.getSource()==point)
c.mode=1;
else
if(e.getSource()==clear){
c.points=new
Vector();
c.x1=-1;
//注意x1的值。
c.repaint();}
//完成清除所有图形的任务,是所有!
}
}
class
MyCanvas2
extends
Canvas
implements
MouseListener,MouseMotionListener
{
int
x1,y1,x2,y2,mode;
Vector
points=new
Vector();
//设置向量,用来存储画线或点的数据,以便画图火定点清除,也
MyCanvas2(){
//就是把一条线一个点一个点的清除
addMouseListener(this);
//增加鼠标监听器,响应触发事件
addMouseMotionListener(this);
//增加鼠标移动事件监听器,响应移动事件
}
public
void
paint(Graphics
g){
for(int
i=0;ipoints.size();i++){
Rectangle
r
=
(Rectangle)(points.elementAt(i));//矩形变量,用来画点,最后形成曲线
g.drawLine(r.x,r.y,r.width,r.height);
}
if(x1!=-1mode==0)
//mode=0,画直线.x1=-1,注意前面设置了此值。
g.drawLine(x1,y1,x2,y2);
}
public
void
mousePressed(MouseEvent
e){
//按下鼠标时,获取鼠标当前坐标位置,也就是线的端点
x1=e.getX();
y1=e.getY();
}
public
void
mouseDragged(MouseEvent
e){
//拖动鼠标,获取第二点坐标
if(mode==0){
//如果mode=0,画线;否则画点。此处为动态获取第二点坐标
x2=e.getX();
//即在按下鼠标,获取第一点坐标后,只要有鼠标拖动,则重划
y2=e.getY();
//线
}
else
{
points.addElement(new
Rectangle(x1,y1,e.getX(),e.getY()));//将当前坐标存入向量,
x1=e.getX();
//效果是拖动鼠标,画出任意的曲线。
y1=e.getY();
}
repaint();
//调用重划命令
}
public
void
mouseReleased(MouseEvent
e){//释放鼠标,mode=0,画线
if(mode==0)
points.addElement(new
Rectangle(x1,y1,e.getX(),e.getY()));
}
public
void
mouseClicked(MouseEvent
e){}//实现抽象接口MouseListener的所有方法
public
void
mouseEntered(MouseEvent
e){}
public
void
mouseExited(MouseEvent
e){}
public
void
mouseMoved(MouseEvent
e){}
}
JAVA 实现打印用什么方法?
Print.java--打印内容定义
[code]
import java.awt.*;
import java.awt.event.*;
import java.awt.print.*;
import java.awt.image.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.border.*;
import javax.swing.event.*;
import java.util.*;
import java.io.*;
public class Print implements Printable{
int m_wPage;
int m_hPage;
int m_orientation;
Printable m_target;
int maxNumPage=1;
String title="数据表格打印";
Font titleFont=new Font("黑体",Font.BOLD,14);
boolean hasTail=true;
int tailAlign=0;
int headAlign=0;
int topSpace=0;
int leftSpace=0;
int yStart=0;
int yEnd=0;
int xStart=topSpace;
int xEnd=0;
int x=0,y=0;
String strTemp="打印内容";
public void doPrint(){
try{
m_orientation=PageFormat.PORTRAIT;
//设置打印对象,默认纸张
PrinterJob prnJob=PrinterJob.getPrinterJob();
PageFormat pageFormat=prnJob.defaultPage();
pageFormat.setOrientation(m_orientation);
m_wPage=(int)(pageFormat.getWidth());
m_hPage=(int)(pageFormat.getHeight());
//将待打印的窗体根据默认纸张设置传入打印对象
prnJob.setPrintable(this,pageFormat);
if(!prnJob.printDialog()) return;
prnJob.print();
}catch(PrinterException ex){
ex.printStackTrace();
System.err.println("打印错误:"+ex.toString());
}
}
/**
* 初始化打印参数
*/
public void initPrintParameter()
{
}
/**
*构造打印内容,以送打印机打印
*/
public int print(Graphics pg,PageFormat pageFormat,
int pageIndex) throws PrinterException{
//初始化打印参数
initPrintParameter();
//将画布设置为页面大小
pg.translate((int)pageFormat.getImageableX(),
(int)pageFormat.getImageableY());
int wPage=0;
int hPage=0;
//根据打印机页面设置调整画布大小
if(pageFormat.getOrientation()==pageFormat.PORTRAIT){
wPage=(int)pageFormat.getImageableWidth();
hPage=(int)pageFormat.getImageableHeight();
}
else{
wPage=(int)pageFormat.getImageableWidth();
wPage+=wPage/2;
hPage=(int)pageFormat.getImageableHeight();
pg.setClip(0,0,wPage,hPage);
}
wPage=wPage-2*leftSpace;
hPage=hPage-2*topSpace;
xStart=leftSpace;
xEnd=wPage-2;
//为画布设置颜色和字体
int y=topSpace;
pg.setFont(titleFont);
pg.setColor(Color.black);
//画标题,并使其居中
Font fn=pg.getFont();
FontMetrics fm=pg.getFontMetrics();
y+=fm.getAscent();
alignText(title,pg,y,xStart,xEnd,headAlign);
y+=30;
x=leftSpace+2;
Font headerFont=new Font("宋体",Font.BOLD,14);
pg.setFont(headerFont);
fm=pg.getFontMetrics();
int h=fm.getAscent();
yStart=y-1;
y+=h;
pg.setFont(headerFont);
fm=pg.getFontMetrics();
int header=y;
h=fm.getHeight();
//计算行高,每页行数,总行数和指定页码的起始行、结束行
int rowH=Math.max(h,10);
int tailH=rowH+30;
int rowPerPage=0;
int leftPix=0;
if(hasTail){
rowPerPage=(hPage-header-tailH)/rowH;
leftPix=(hPage-header-tailH)%rowH;
yEnd=hPage-leftPix-tailH+2;
}
else{
rowPerPage=(hPage-header)/rowH;
leftPix=(hPage-header)%rowH;
yEnd=hPage-leftPix+2;
}
pg.drawString(strTemp,x,y);
//画表格边框
pg.drawLine(xStart,yStart,xStart,yEnd);
pg.drawLine(xStart,yStart,xEnd,yStart);
pg.drawLine(xEnd,yStart,xEnd,yEnd);
pg.drawLine(xStart,yEnd,xEnd,yEnd);
//打印页码
if(hasTail){
int pageNumber=pageIndex+1;
String s="第"+pageNumber+"页";
alignText(s,pg,yEnd+30,xStart,xEnd,tailAlign);
}
System.gc();
return PAGE_EXISTS;
}
/**
* 文字排列,坐标在y处,显示范围(start-end)
* 0表示居中显示,1表示左对齐,2表示右对齐
*/
private void alignText(String s,Graphics pg,int y,int start,
int end,int mode){
Font fn=pg.getFont();
FontMetrics fm=pg.getFontMetrics();
int wString=fm.stringWidth(s);
int x=start;
switch(mode)
{
case 0:
if((end-start-wString)0) x=start+(end-start-wString)/2;
break;
case 1:
break;
case 2:
if((end-start-wString)0) x=start+(end-start-wString);
break;
}
pg.drawString(s,x,y);
}
public static void main(String[] args){
Print p=new Print();
p.doPrint();
}
}
[code]
运行方法:
javac -d . Print.java
java Print
自己运行一下
JAVA 改变Canvas画布尺寸
布局问题,默认是加在中间会全部铺满的
class LayoutTest {
LayoutTest() {
init();
}
void init() {
JFrame frame = new JFrame();
JPanel epanel = new JPanel();
JPanel spanel = new JPanel();
JPanel wpanel = new JPanel();
JPanel npanel = new JPanel();
Container contentPane = frame.getContentPane();
contentPane.setBackground(Color.BLUE);
Canvas canvas = new Canvas();
canvas.setBackground(Color.WHITE);
contentPane.add(canvas,"Center");
contentPane.add(epanel,"East");
contentPane.add(spanel,"South");
contentPane.add(wpanel,"West");
contentPane.add(npanel,"North");
frame.setSize(300,200);
frame.setVisible(true);
}
public static void main(String[] args) {
new LayoutTest();
}
}
你看这个就知道了。
java中我如何获取时区?
//我实现一个时钟窗口程序给你了,好让你更容易理解,希望对你有帮助。
import java.awt.*;
import java.awt.event.*;
import java.util.*;
//世界时钟
public class TimerTest {
public static void main(String[] args) {
new TimerTestFrame("世界时钟");
}
}
class TimerTestFrame extends Frame {
/**
*
*/
private static final long serialVersionUID = 1L;
public TimerTestFrame(String s) {
super(s);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
});
setLayout(new GridLayout(2, 6));
ClockCanvas clk1 = new ClockCanvas("北京", "GMT+8"); // 创建时钟
ClockCanvas clk2 = new ClockCanvas("巴黎", "GMT+2");
ClockCanvas clk3 = new ClockCanvas("华盛顿", "GMT-4");
ClockCanvas clk4 = new ClockCanvas("洛衫矶", "GMT-7");
ClockCanvas clk5 = new ClockCanvas("伦敦", "GMT+1");
ClockCanvas clk6 = new ClockCanvas("芝加哥", "GMT-5");
add(clk1);
add(clk2);
add(clk3);
add(clk4);
add(clk5);
add(clk6);
setSize(500, 350); // 设置框架宽高
setVisible(true);
}
}
class ClockCanvas extends Canvas implements Runnable {
/**
*
*/
private static final long serialVersionUID = 1L;
private int seconds = 0;
private String city;
private GregorianCalendar calendar;
Thread t;
public ClockCanvas(String c, String tz) {
city = c;
//也可以通过TimeZone.setTimeZone(String n)函数改变时区,n为时区参数名。
calendar = new GregorianCalendar(TimeZone.getTimeZone(tz));
t = new Thread(this);
t.start();
setSize(125, 125); // 设置画布大小
setBackground(Color.black);
}
// 重写父类的方法绘制时钟图形
public void paint(Graphics g) {
Graphics2Dg2d = (Graphics2D) g;
BasicStroke bstroke = new BasicStroke(2.0f);
g2d.setStroke(bstroke);
g2d.setColor(Color.green);
g2d.drawOval(0, 0, 100, 100);
bstroke = new BasicStroke(5.0f);
g2d.setStroke(bstroke);
g2d.drawLine(50, 0, 50, 5);
g2d.drawLine(0, 50, 5, 50);
g2d.drawLine(50, 95, 50, 98);
g2d.drawLine(95, 50, 98, 50);
double hourAngle = 2 * Math.PI * (seconds - 3 * 60 * 60)
/ (12 * 60 * 60);
double minuteAngle = 2 * Math.PI * (seconds - 15 * 60) / (60 * 60);
double secondAngle = 2 * Math.PI * (seconds - 15) / (60);
bstroke = new BasicStroke(5.0f);
g2d.setStroke(bstroke);
g2d.drawLine(50, 50, 50 + (int) (30 * Math.cos(hourAngle)),
50 + (int) (30 * Math.sin(hourAngle)));
bstroke = new BasicStroke(3.0f);
g2d.setStroke(bstroke);
g2d.drawLine(50, 50, 50 + (int) (40 * Math.cos(minuteAngle)),
50 + (int) (40 * Math.sin(minuteAngle)));
bstroke = new BasicStroke(1.0f);
g2d.setStroke(bstroke);
g2d.drawLine(50, 50, 50 + (int) (45 * Math.cos(secondAngle)),
50 + (int) (45 * Math.sin(secondAngle)));
g2d.setColor(Color.red);
g2d.drawString(city, 35, 115);
}
public void timeElapsed() {
//new Date()()获得当前时间
System.out.println(new Date()());
calendar.setTime(new Date()());
seconds = calendar.get(Calendar.HOUR) * 60 * 60
+ calendar.get(Calendar.MINUTE) * 60
+ calendar.get(Calendar.SECOND);
}
public void run() {
try {
while (true) {
Thread.sleep(300);
timeElapsed();
repaint();
}
} catch (InterruptedException e) {
}
}
}
求解答以下的java源代码,详细点,说明这个程序的设计思路,还有比如运用了多线程的话运用了多线程的什么
import java.awt.*;
import java.awt.event.*;
import java.util.Random;
import javax.swing.Timer;
public class PinBall
{
private final int TABLE_WIDTH = 300;//桌面宽度
private final int TABLE_HEIGHT = 400;//桌面高度
private final int RACKET_Y = 340;//球拍的垂直位置
private final int RACKET_HEIGHT = 20;//球拍高度
private final int RACKET_WIDTH = 60;//球拍宽度
private final int BALL_SIZE = 16;//球的大小
private Frame f = new Frame("弹球游戏");//实例化一个窗口
Random rand = new Random();//实例化一个随机数生成器
private int ySpeed = 10;//小球的纵向运动数度、
private double xyRate = rand.nextDouble() - 0.5;//返回一个-0.5到0.5之间的比率用控制小球运动方向
private int xSpeed = (int)(ySpeed*xyRate*2);//这个横向速度在-10到10之间,产生左右摆动运动效果
private int ballX = rand.nextInt(200)+20;//小球开始的横坐标位置,200表示产生0到100之间的随机数
private int ballY = rand.nextInt(10)+20;//小球开始的纵坐标位置
private int racketX = rand.nextInt(200);//球拍开始时的横坐标位置
private MyCanvas tableArea = new MyCanvas();//实力化一个画布工具,集成Canvas类
private String shape = "";//保存需要绘制图形的字符串属性
Timer timer;//声明一个时间变量
private boolean isLose = false;//表示游戏是否结束
public void init()
{
tableArea.setPreferredSize(new Dimension(TABLE_WIDTH,TABLE_HEIGHT));//定义画布大小
f.add(tableArea);//添加画布到窗口
KeyAdapter keyProcessor = new KeyAdapter()//实例化一个键盘监听事件适配器
{
public void keyPressed(KeyEvent ke)//重写适配器里面的按下某键盘方法
{
if(ke.getKeyCode()==KeyEvent.VK_LEFT)//按下键盘左键时
{
if(racketX 0)//球拍左边框不能出画布的左边框
racketX -=10;//按一左键次向左移动10个像素
}
if(ke.getKeyCode()==KeyEvent.VK_RIGHT)//按下键盘右键时
{
if(racketX TABLE_WIDTH - RACKET_WIDTH)//球拍右边框不能出画布的右边框
racketX +=10;//按一次右键移动向右移动10个像素
}
}
};
f.addKeyListener(keyProcessor);//给窗口添加键盘监听器
tableArea.addKeyListener(keyProcessor);//给画布添加键盘监听器
ActionListener taskPerformer = new ActionListener()//这里是实例化了一个监听接口,这个接口里面只有一个方法
{
public void actionPerformed(ActionEvent evt)//重写这个接口里面的方法,判断小球的位置
{
if(ballX=0 || ballX=TABLE_WIDTH-BALL_SIZE)//保证小球横向上在画布之内运动
{
xSpeed = -xSpeed;//触发反方向运动
}
if(ballY=RACKET_Y-BALL_SIZE(ballXracketX||ballXracketX+RACKET_WIDTH))//出了球拍的可击打范围
{
timer.stop();//停止对监听器的触发
isLose=true;//将标志isLose变量置为true
tableArea.repaint();//调用画布的重绘方法
}
else if(ballY=0||(ballY=RACKET_Y-BALL_SIZEballYracketXballX=racketX+RACKET_WIDTH))//小球在球拍之内,而其到达球拍的高度
{
ySpeed=-ySpeed;//上下方向改变,小球反弹
}
ballY+=ySpeed;//小球的坐标在纵向上增加
ballX+=xSpeed;//小球的坐标在横向上的增加
tableArea.repaint();//调用画布的重绘方法3
}
};
timer = new Timer(100,taskPerformer);//每隔0.1秒运行一次监听器
timer.start();//计时器开始运行
f.addWindowListener(new MyListener());//关闭窗口事件
f.pack();//设置窗口最佳大小
f.setVisible(true);//显示窗口
}
class MyListener extends WindowAdapter//关闭窗口的类
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
public static void main(String[] args)//程序入口
{
new PinBall().init();//调用PinBall类里面的init()方法
}
class MyCanvas extends Canvas//建一个集成Canvas类的类
{
public void paint(Graphics g)//重写父类的绘图方法
{
if(isLose)//如果isLose为真,则在画布里打印“游戏已结束”
{
g.setColor(new Color(255,0,0));//当前颜色
g.setFont(new Font("黑体",Font.BOLD,30));//字体名称,样式,大小
g.drawString("游戏已结束!",50,200);//按坐标绘制文字图形
}
else//负责
{
g.setColor(new Color(240,240,80));//当前颜色
g.fillOval(ballX,ballY,BALL_SIZE,BALL_SIZE);//填充颜色,根据坐标和长宽填充圆形
g.setColor(new Color(80,80,200));//当前颜色
g.fillRect(racketX,RACKET_Y,RACKET_WIDTH,RACKET_HEIGHT);//填充颜色,根据坐标和长宽填充矩形
}
}
}
}
java设置画布大小的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于画布大小怎么设置、java设置画布大小的信息别忘了在本站进行查找喔。
发布于:2022-12-08,除非注明,否则均为
原创文章,转载请注明出处。