黑马程序员技术交流社区

标题: Java中有控制台清屏的吗?网上找了下,没有好用的。。求.... [打印本页]

作者: 李德全    时间: 2013-5-10 18:25
标题: Java中有控制台清屏的吗?网上找了下,没有好用的。。求....
本帖最后由 李德全 于 2013-5-11 19:36 编辑

那天看见[backcolor=transparent !important]邵震大神谢了个五子棋的程序,我也打算写一个,把棋盘和落子的程序写完了,想实现一个棋盘不动的效果,就需要清屏,但是不会,网上找的不能用呢,有代码杀手知道吗?吗?

作者: 马伟奇    时间: 2013-5-10 18:45
{:soso_e178:}
作者: 李德全    时间: 2013-5-10 19:36
马伟奇 发表于 2013-5-10 18:45

巨款啊:Q
作者: 任江峰    时间: 2013-5-10 20:05
cmd清屏用cls
作者: 李德全    时间: 2013-5-10 21:03
任江峰 发表于 2013-5-10 20:05
cmd清屏用cls

要Java程序控制的呢...
作者: Miss小强    时间: 2013-5-10 21:15
你强大啊。。。。。。
作者: 李德全    时间: 2013-5-10 21:30
Miss小强 发表于 2013-5-10 21:15
你强大啊。。。。。。

:lol 嘻嘻,但是还是你厉害啊,28分,羡慕啊! 现在程序已经把横向纵向还有从左下到右上方向的胜负检测做出来那,正在写从左上到右上的。
作者: Sword    时间: 2013-5-10 21:45
GUI编程中刷新屏幕的代码用repaint()方法结合多线程使用
  1. //刷新屏幕,会进行从新调用repaint方法
  2.                    repaint();
  3.                    try {
  4.                          //让当前的线程睡眠50毫秒
  5.                         Thread.sleep(50);
  6.                 } catch (InterruptedException e) {
  7.                         // TODO Auto-generated catch block
  8.                         e.printStackTrace();
  9.                 }
  10.                   
复制代码
不知道在dos窗口下是否管用,你可以实验一下,给你个GUI中刷新的例子,可以参考一下:
  1. import java.awt.Color;
  2. import java.awt.Frame;
  3. import java.awt.Graphics;
  4. import java.awt.Image;

  5. import javax.swing.ImageIcon;
  6. import javax.swing.JFrame;


  7. public class Test {

  8.         /**
  9.          * @param args
  10.          */
  11.         public static void main(String[] args) {
  12.                 // TODO Auto-generated method stub
  13.         System.out.println("Hello World");
  14.         
  15.         new MyFrame();
  16.         }

  17. }

  18. class MyFrame extends JFrame{
  19.           
  20.           int x=200;
  21.           int y=200;
  22.           //离屏画布
  23.           Image offs;
  24.           //离屏画笔
  25.           Graphics offg;
  26.           //定义图片变量
  27.           Image img_bk;
  28.           
  29.           boolean isShow=true;

  30.            public MyFrame()
  31.            {
  32.                   //设置窗体的名称
  33.                    setTitle("我的小游戏");
  34.                    //设置窗体起始的左上角的位置和宽度高度
  35.                    setBounds(100, 100, 800,600);
  36.                    //设置界面可显示
  37.                    setVisible(true);
  38.                    setDefaultCloseOperation(EXIT_ON_CLOSE);
  39.                   
  40.            }
  41.            int startA=200;
  42.            int endA=300;
  43.            int dir=0;
  44.            int speed=1;
  45.            int arc_x=100;
  46.            int arc_y=100;
  47.             
  48.            int w=9;
  49.           
  50.            //Graphics设置画笔
  51.            public void paint(Graphics g)
  52.            {
  53.                    if(offs==null)
  54.                    {
  55.                            //找到图片资源
  56.                            img_bk=new ImageIcon(getClass().getResource("/Winter.jpg")).getImage();
  57.                           
  58.                            //初始化离屏画布
  59.                            offs=createImage(800,600);
  60.                            //初始化离幕画笔
  61.                            offg=offs.getGraphics();
  62.                           
  63.                    }
  64.                   
  65.                   
  66.                    offg.setColor(Color.black);
  67.                    offg.fillRect(0, 0, 800, 600);
  68.                   
  69. //                   //绘制出图片
  70. //                   offg.drawImage(img_bk,0, 0, null);
  71. //                   x++;
  72. //                  
  73.          
  74.                   
  75.            //循环的切割画布
  76.                    for (int i = 0; i <100; i++) {
  77.                           
  78.                            //setClip方法可以用于切割画布
  79.                            offg.setClip(i*10,0,w,600);
  80.                            offg.drawImage(img_bk,0,0,null);
  81.                        
  82.                     }
  83.                     //  w++;
  84.                    if(isShow)
  85.                    {
  86.                            w++;
  87.                            if(w>10)
  88.                            {
  89.                                    isShow=!isShow;
  90.                            }
  91.                           
  92.                    }else
  93.                    {
  94.                            w--;
  95.                            if(w<0)
  96.                            {
  97.                                    isShow=!isShow;
  98.                                   
  99.                            }
  100.                    }          
  101.                   
  102.                    offg.setClip(0,0,800,600);
  103.                   
  104.                    offg.setColor(Color.red);
  105.                    offg.fillRect(x, y, 50, 50);
  106.                   
  107.                   
  108.                    offg.fillArc(arc_x, arc_y, 30, 30, startA, endA);
  109.                    g.drawImage(offs, 0, 0, null);
  110.                   
  111.                    switch(dir)
  112.                    {
  113.                    case 0:
  114.                            startA--;
  115.                            endA+=speed*2;
  116.                            arc_x+=5;
  117.                            if(startA<15)
  118.                            {
  119.                                    dir=1;
  120.                            }
  121.                          break;  
  122.                          
  123.                    case 1:
  124.                            startA+=speed;
  125.                            endA-=speed*2;
  126.                            arc_x-=5;
  127.                            if(startA>30)
  128.                            {
  129.                                    dir=0;
  130.                            }
  131.                          break;  
  132.                    }
  133.                   
  134.                   
  135.                    System.out.println("Paint方法");
  136.                    //刷新屏幕,会进行从新调用repaint方法
  137.                    repaint();
  138.                    try {
  139.                          //让当前的线程睡眠50毫秒
  140.                         Thread.sleep(50);
  141.                 } catch (InterruptedException e) {
  142.                         // TODO Auto-generated catch block
  143.                         e.printStackTrace();
  144.                 }
  145.                   
  146.                   
  147.            }
  148. }
复制代码
//找到图片资源
img_bk=new ImageIcon(getClass().getResource("/Winter.jpg")).getImage();
这句代码中的Winter.jpg可以更换成你自己的图片,找一张你自己的图片放在和java文件相同的文件夹下
作者: 李德全    时间: 2013-5-10 22:03
Sword 发表于 2013-5-10 21:45
GUI编程中刷新屏幕的代码用repaint()方法结合多线程使用不知道在dos窗口下是否管用,你可以实验一下,给你 ...

:'( 好高级
作者: rosv    时间: 2013-5-12 09:33
用JNI可以吧,用Java调用C/C++生成的dll文件,system("cls");直接调用命令行里的命令,不过不能跨平台了
作者: rosv    时间: 2013-5-12 10:13
  1. 用Java调用JNI
  2. //C++动态链接库文件用于生成dll的动态链接库
  3. #include <cstdlib>
  4. #include "jni.h"
  5. #include "com_rosv_Command.h"
  6. #include <iostream.h>
  7. JNIEXPORT void JNICALL Java_com_rosv_Command_cls(JNIEnv * jni, jclass jc)
  8. {
  9.         system("cls");
  10. }
  11. //Java中声明native方法
  12. package com.rosv;
  13. public class Command
  14. {
  15.         public static native void cls();
  16. }
  17. //测试类注意
  18. package com.rosv;
  19. import com.rosv.*;
  20. public class TestCommand
  21. {
  22.         public static void main(String[] args)
  23.         {
  24.                 System.out.println("Hello World!");//这一行输出你看不到
  25.                 System.loadLibrary("command");//加载动态链接库文件command是文件名
  26.                 Command.cls();
  27.                 System.out.println("清屏后!");
  28.         }
  29. }
  30. 注意引用头文件
  31. 把下面三个文件放在c/C++工程根目录
  32. com_rosv_Command.h //这是用javah生成的头文件
  33. jni.h 修改#include <jni_md.h>为#include "jni_md.h"
  34. jni_md.h
  35. //详情参看黑马官网JNI视频
  36. 没有C/C++编译器的用http://www.cr173.com/soft/35179.html支持win7
  37. 安装的目录完全路径加入到path环境变量
  38. 如我装在D盘
  39. D:\Program Files\Microsoft Visual Studio\VC98\Bin;
复制代码

作者: 李德全    时间: 2013-5-12 10:26
rosv 发表于 2013-5-12 10:13

高手啊,膜拜中》。。
作者: rosv    时间: 2013-5-12 11:43
李德全 发表于 2013-5-12 10:26
高手啊,膜拜中》。。

:L 我不是高手,真的不是:L




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2