关于javaellipse的信息

博主:adminadmin 2023-03-19 00:04:10 381

本篇文章给大家谈谈javaellipse,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

求java版汉诺塔的演示程序

源代码:

/**

 *本程序完成的功能是利用汉递规算法实现汉诺塔的动态演示程序

 */

import javax.swing.*;

import java.awt.geom.*;

import java.awt.event.*;

import java.awt.*;

public class Hanio extends JApplet implements ActionListener, Runnable

{

 /**

*diskNum是盘子的数量

*/

 private int diskNum ;

 /**

*各个组件的句柄

*/

 private JButton begin, stop;

 private JLabel lDiskNum;

 private JTextField text;

 JPanel pane;

 /**

*定义一个线程句柄

*/

 private Thread animate;

 /**

*定义a,b,c三个柱子上是否有盘子,有哪些盘子

*/

 private int adisk[];

 private int bdisk[];

 private int cdisk[];

 public void init()

 {

  

  Container content = getContentPane();

  content.setLayout(new BorderLayout());

  lDiskNum = new JLabel(盘子的数目);

  

  text = new JTextField(8);

  

  begin = new JButton(开始);

  begin.addActionListener(this);

  

  stop = new JButton(停止);

  stop.addActionListener(this);

  

  pane = new JPanel();

  pane.setLayout(new FlowLayout());

  pane.add(lDiskNum);

  pane.add(text);

  pane.add(begin);

  pane.add(stop);

  content.add(pane, BorderLayout.SOUTH);

  

 }

 public void paint(Graphics g)

 {

  Graphics2D g2D = (Graphics2D)g;

  Ellipse2D.Double ellipse;

  g2D.setPaint(getBackground());

  if(adisk != null)

  {

   /**

*消除以前画的盘子

*/

   for(int j=adisk.length, i=0; --j=0; i++ )

   {

    ellipse = new Ellipse2D.Double(20+i*5, 180-i*10, 180-i*10, 20);

    g2D.fill(ellipse);

    ellipse = new Ellipse2D.Double(220+i*5, 180-i*10, 180-i*10, 20);

    g2D.fill(ellipse);

    ellipse = new Ellipse2D.Double(420+i*5, 180-i*10, 180-i*10, 20);

    g2D.fill(ellipse);

   

   }

   drawEllipse(g, 20, adisk);//画A组盘子

   drawEllipse(g, 220, bdisk);//画B组盘子

   drawEllipse(g, 420, cdisk);//画C组盘子

   

  }

  pane.repaint(); 

 }

 public void update(Graphics g)

 {

  paint(g);

 }

 /**画出椭圆代表盘子,g是图形环境,x是最下面的盘子的横坐标,

*arr是柱子数组

*/

 public void drawEllipse(Graphics g,int x,int arr[])

 {

  Graphics2D g2D = (Graphics2D)g;

  Ellipse2D.Double ellipse;

  g2D.setPaint(Color.gray);

  g2D.draw(new Line2D.Double(x+90, 10, x+90, 180));

  for(int j=arr.length, i=0; --j=0; i++ )

   if(arr[j] != 0)

   {

    if(i%2 == 0)

     g2D.setPaint(Color.blue);

    else

     g2D.setPaint(Color.red);

    ellipse = new Ellipse2D.Double(x+i*5, 180-i*10, 180-i*10, 20);

    g2D.fill(ellipse);

   }

 }

 public void actionPerformed(ActionEvent e)

 {

  String command = e.getActionCommand();

  if(command.equals(开始))

  {

   /**

*进行初始化,开始的时候只有a柱子上有盘子,其他柱子都没有

*/

   diskNum = Integer.parseInt(text.getText());

   

   adisk = new int[diskNum];

   for(int i=0; iadisk.length; i++)

    adisk[i] = 1;

   bdisk = new int[diskNum];

   for(int k=0; kbdisk.length; k++)

    bdisk[k] = 0;

   cdisk = new int[diskNum];

   for(int i=0; icdisk.length; i++)

    cdisk[i] = 0;

   repaint();

   if(animate == null || !animate.isAlive())//创建一个线程

   {

    animate = new Thread(this);

    animate.start();

   }

  }

  if(command.equals(停止))

  {

   for(int k=0; kbdisk.length; k++)

    bdisk[k] = 0;

   for(int i=0; icdisk.length; i++)

    cdisk[i] = 0;

   repaint();

   text.setText();

   animate = null;

  }

 }

 /**

*线程方法,在此调用汉诺塔执行移动盘子操作

*/

 public void run()

 {

  hanio(diskNum, 'A', 'B', 'C');

  repaint();

 }

 /**

*汉诺塔递规调用程序,n是盘子的数量,A,B,C分别代表三个柱子

*/

 public void hanio(int n, char A, char B, char C)

 {

  if(n 1)

  {

   hanio(n-1, A, C, B);

   pause();//停顿几秒在执行

   switch(A)

   {

    case 'A':adisk[n-1] = 0;break;

    case 'B':bdisk[n-1] = 0;break;

    case 'C':cdisk[n-1] = 0;break;

    default:break;

   }

   switch(C)

   {

    case 'A':adisk[n-1] = 1;break;

    case 'B':bdisk[n-1] = 1;break;

    case 'C':cdisk[n-1] = 1;break;

    default:break;

   }

   repaint();

   hanio(n-1, B, A, C);

  }

  pause();

switch(A)

  {

   case 'A':adisk[n-1] = 0;break;

   case 'B':bdisk[n-1] = 0;break;

   case 'C':cdisk[n-1] = 0;break;

   default:break;

  }

  switch(C)

  {

   case 'A':adisk[n-1] = 1;break;

   case 'B':bdisk[n-1] = 1;break;

   case 'C':cdisk[n-1] = 1;break;

   default:break;

  }

  repaint();

  

 }

 

 /**

*每隔半妙钟移动一个盘子

*/

 public void pause()

 {

  try{

   Thread.sleep(500);//可以修改此值加快盘子移动的速度

  }catch(InterruptedException e){}

 }

}

用java怎样画椭圆?

你的问题是是使用java画椭圆,可以使用awt和swing类库实现

画椭圆可以通过画矩形及其内切椭圆实现,示例代码如下

如果只需要椭圆,则无需g2.draw(rect);

class DrawPanel extends JPanel {

public void paintComponent(Graphics g) {

super.paintComponent(g);

Graphics2D g2 = (Graphics2D) g;

// 画矩形

double leftX = 100;

double topY = 100;

double width = 200;

double height = 150;

Rectangle2D rect = new Rectangle2D.Double(leftX, topY, width, height);

g2.draw(rect);

// 画rect的内切椭圆

Ellipse2D ellipse = new Ellipse2D.Double();

ellipse.setFrame(rect);

g2.draw(ellipse);

}

}

JAVA中如何通过鼠标拖拽画椭圆

写一个鼠标事件处理程序,当鼠标按下时记录下所在位置,当松开时记录下所在位置,2点就都得到了。如果想实现拖曳的效果,那么当鼠标按下时就开始,每隔一段时间记录鼠标所在位置,根据2点画椭圆,直到鼠标松开为止,获得最终椭圆

2点确定椭圆和2点确定矩形是一样的,这个椭圆就是被这个矩形包围的最大椭圆,矩形宽为椭圆短轴,长为长轴,矩形中心为椭圆圆心。

使用Java在窗口中部显示一个带文字的椭圆

操作步骤:

第1步:我们在Photoshop(本例使用CS5版本)里新建一个空白文件,然后选择路径工具里的椭圆工具画一个类似下图的椭圆形状;

第2步:选择文字工具(快捷键为T),把光标移到路径上任意一个地方做为输入起点,此时文字光标发生变化;

第3步:我们开始输入字符,在输入完成后,我们会看到起点处显示一个叉,终点显示一个实心黑点(当输入的文字过长,则终点与起点会重合在一起);

第4步:文字输完后,我们还能再调整,比如可以再使用文字工具在之前输入的文字处单击,就能激活文字修改;

第5步:前面做的是路径是一个封闭的路径,我们还可以做不规则的;

第6步:同样的我们输入文字,把两个路径文字放在一起后的效果就可以了。

向左转|向右转

java设定背景颜色

本来是在drawcomponent这个里边使用setBackground,你想啊drawcomponent是继承JComponent的所以它是一个容器,所以它同样有setBackground这个方法来设置它的背景颜色

但是因为你在设置它本身为一个画布,因为你用了paintComponent(Graphics g)

这个方法,所以setBackground这个方法即使你用了也看不到很大的效果。但是有一种取代的方法就是在paintComponent(Graphics g)方法中首先就用Graphics 所含有的方法g.setColor(Color.black);来设置背景颜色再用g.fillRect(0, 0, this.getWidth(), this.getHeight());来填满整个容器,这就达到了设置背景目的。然后你再g.setColor(其他颜色);来绘制其它图形.

具体代码:(在你以上的代码上修改了点)

public void paintComponent(Graphics g)

{

Graphics2D g2=(Graphics2D)g;

g.setColor(Color.black);//这里设置背景颜色

g.fillRect(0, 0, this.getWidth(), this.getHeight());//这里填充背景颜色

double x=100;

double y=100;

double w=200;

double h=150;

Rectangle2D rect=new Rectangle2D.Double(x,y,w,h);

g2.setPaint(Color.white);//这里是你设置其他笔触颜色

g2.draw(rect);

Ellipse2D ellipse=new Ellipse2D.Double();

ellipse.setFrame(rect);

g2.draw(ellipse);

Point2D p1=new Point2D.Double(x-40,y-30);

Point2D p2=new Point2D.Double(x+w+40,y+h+30);

g2.draw(new Line2D.Double(p1,p2));

double centerx=rect.getCenterX();

double centery=rect.getCenterY();

double radius=150;

Ellipse2D circle=new Ellipse2D.Double();

circle.setFrameFromCenter(centerx,centery,centerx+125,centery+125);

g2.draw(circle);

}

测试结果图

javaellipse的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、javaellipse的信息别忘了在本站进行查找喔。