「java设置画布大小」画布大小怎么设置

博主:adminadmin 2022-12-08 01:36:08 71

今天给各位分享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设置画布大小的信息别忘了在本站进行查找喔。

The End

发布于:2022-12-08,除非注明,否则均为首码项目网原创文章,转载请注明出处。