`
bsr1983
  • 浏览: 1116408 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

利用键盘画线

阅读更多
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.ArrayList;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class DemoForDrawLineByKey extends JFrame {

/**
  * <p>功能描述:[字段功能描述]</p>
  */
private static final long serialVersionUID = -8155745524182056025L;
private ArrayList<MyPoint> pointArrayList;
private int intNowX = 10;
private int intNowY = 10;
private MyPanelForDrawLine panel;
private int oldCode = 0;
private int movePx = 3;
private JPanel mainpanel;
/**
  * Launch the application
  *
  * @param args
  */
public static void main(String args[]) {
  DemoForDrawLineByKey frame = new DemoForDrawLineByKey();
  frame.setBounds(100, 100, 500, 375);
  frame.setVisible(true);
  frame.init();
}
public void init() {
  panel.requestFocusInWindow();
}
/**
  * Create the frame
  */
public DemoForDrawLineByKey() {
  super();
  setTitle("利用键盘画线");
  pointArrayList = new ArrayList<MyPoint>();
  getContentPane().setLayout(null);
  setBounds(100, 100, 500, 375);
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  mainpanel = new JPanel();
  mainpanel.setBounds(0, 0, 492, 341);
  getContentPane().add(mainpanel);
  mainpanel.setLayout(null);
  panel = new MyPanelForDrawLine();
  panel.setBounds(0, 0, 492, 341);
  panel.requestFocusInWindow();
  mainpanel.add(panel);

}
class MyPanelForDrawLine extends JPanel {
  private static final long serialVersionUID = 3470945714820691208L;
  KeyListenerForPanel mKeyListenerForPanel = new KeyListenerForPanel();
  public MyPanelForDrawLine() {
   super();
   addKeyListener(mKeyListenerForPanel);
  }
  public void paintComponent(Graphics g) {
   super.paintComponents(g);
   g.setColor(Color.WHITE);
   g.fillRect(0, 0, getWidth(), getHeight());
   g.setColor(Color.BLACK);
   drawOldLine(g);
   g.fillRect(intNowX, intNowY, 3, 3);
  }
  public void drawOldLine(Graphics g) {
   if (pointArrayList.size() > 0) {
    Object tmpObj[] = pointArrayList.toArray();
    MyPoint lasePoint = null;
    if (tmpObj.length >= 1) {
     lasePoint = (MyPoint) tmpObj[tmpObj.length - 1];
    }
    for (int i = 0; i < tmpObj.length - 1; i++) {
     MyPoint tmpPoint1 = (MyPoint) tmpObj[i];
     MyPoint tmpPoint2 = (MyPoint) tmpObj[i + 1];
     g.drawLine(tmpPoint1.getPx(), tmpPoint1.getPy(), tmpPoint2
       .getPx(), tmpPoint2.getPy());
    }
    g.drawLine(lasePoint.getPx(), lasePoint.getPy(), intNowX,
      intNowY);
   }
  }
}
class MyPoint {
  int px = 0;
  int py = 0;
  public MyPoint(int x, int y) {
   px = x;
   py = y;
  }
  public int getPx() {
   return px;
  }
  public void setPx(int px) {
   this.px = px;
  }
  public int getPy() {
   return py;
  }
  public void setPy(int py) {
   this.py = py;
  }
}
class KeyListenerForPanel implements KeyListener {
  public void keyPressed(KeyEvent e) {
   int keycodeOfKey = e.getKeyCode();
   if (keycodeOfKey != oldCode) {
    oldCode = keycodeOfKey;
    MyPoint tmpPoint = new MyPoint(intNowX, intNowY);
    pointArrayList.add(tmpPoint);
   } else {
    switch (keycodeOfKey) {

     // 向上
     case KeyEvent.VK_UP :
      intNowY = intNowY - movePx;

      break;
     // 向下
     case KeyEvent.VK_DOWN :
      intNowY = intNowY + movePx;
      break;
     // 向左
     case KeyEvent.VK_LEFT :
      intNowX = intNowX - movePx;
      break;
     // 向右
     case KeyEvent.VK_RIGHT :
      intNowX = intNowX + movePx;
      break;
    }
   }
   panel.repaint();
  }

  public void keyReleased(KeyEvent e) {
   int keycodeOfKey = e.getKeyCode();
   if (keycodeOfKey != oldCode) {
    oldCode = keycodeOfKey;
    MyPoint tmpPoint = new MyPoint(intNowX, intNowY);
    pointArrayList.add(tmpPoint);
   } else {
    switch (keycodeOfKey) {
     // 向上
     case KeyEvent.VK_UP :
      intNowY = intNowY - movePx;
      break;
     // 向下
     case KeyEvent.VK_DOWN :
      intNowY = intNowY + movePx;
      break;
     // 向左
     case KeyEvent.VK_LEFT :
      intNowX = intNowX - movePx;
      break;
     // 向右
     case KeyEvent.VK_RIGHT :
      intNowX = intNowX + movePx;
      break;
    }
   }
   panel.repaint();
  }
  public void keyTyped(KeyEvent e) {
  }
}

}

分享到:
评论

相关推荐

    iOS 键盘平滑动画.zip

    项目利用`UIResponder`的`keyboardWillShow:`和`keyboardWillHide:`方法来捕获键盘的显示和隐藏事件,从而执行自定义的动画。 在键盘显示时,项目可能会包含以下步骤: 1. 计算键盘的高度:通过`...

    MFC图形学画线算法,可鼠标拖动,键盘按键平移

    本项目“MFC图形学画线算法,可鼠标拖动,键盘按键平移”聚焦于实现这一功能,利用MFC(Microsoft Foundation Classes)库,构建了一个交互式的图形界面,用户可以通过鼠标进行画线操作,并通过键盘控制线段的平移。...

    运用vc++实现特效画线

    7. **用户交互**:结合鼠标或键盘事件,可以让用户实时控制画线的过程,例如选择颜色、样式,或者直接绘制自由形状。 8. **代码示例**:在实际编程中,你需要在窗口的消息处理函数(如WndProc)中处理WM_PAINT消息...

    Qt实现桌面画线、标记,流畅绘制,支持鼠标和多点触控绘制

    在"Qt实现桌面画线、标记,流畅绘制,支持鼠标和多点触控绘制"这个项目中,开发人员利用了Qt的QGraphics框架来实现这一目标。 首先,QGraphics框架是Qt的一个重要部分,它提供了一种强大的方式来处理2D图形和场景。...

    GUI.zip.rar_按键画线_虚线点画线

    "GUI.zip.rar_按键画线_虚线点画线"这个标题暗示了一个项目或程序,它允许用户通过GUI来绘制图形,特别是利用按键操作来控制线条的样式,如实线、虚线和点画线,并可能包括改变线条颜色的功能。 首先,我们来讨论...

    汇编实现画笔程序(键盘)

    标题“汇编实现画笔程序(键盘)”和描述中提到了一个基于汇编语言编写的画笔程序,它利用键盘交互,具有屏幕分块、颜色选择、图形选择和绘图功能,支持平移和放缩操作。这个程序在早期计算机编程教育中常见,因为...

    opengl的鼠标画线,圆,矩形,还有个菜单,很适合opengl初学者学习

    本教程针对OpenGL初学者,重点讲解如何利用鼠标进行交互式画线、绘制圆和矩形,并实现简单的菜单功能。 一、OpenGL基础 OpenGL是一个跨语言、跨平台的编程接口,提供了一系列函数来创建和操纵2D和3D图形。它不包含...

    MFC橡皮筋画线实现

    在深入探讨MFC中橡皮筋画线的实现之前,我们先简要回顾一下MFC(Microsoft Foundation Classes)的基础知识。MFC是一个基于C++的类库,它封装了Windows API,使得开发者能够更高效、更简洁地开发Windows应用程序。在...

    VC下OpenGL编程框架实现画线画点

    本文将深入探讨如何在Visual C++ (VC) 下利用OpenGL框架实现画线和画点的功能。 首先,我们需要理解OpenGL是一个跨语言、跨平台的图形库,它提供了一组用于绘制2D和3D图形的函数。在VC++中,我们通常使用OpenGL的...

    lineDrawing_c++ 画线.zip

    通过这个项目,初学者可以了解到C++结合SDL进行图形编程的基本流程,以及如何利用算法实现基本的画线功能。同时,这也是一个很好的起点,可以进一步探索更复杂的图形操作,如曲线绘制、颜色填充等。对于有兴趣深入...

    tab下面画线并有效三角

    "Tab下面画线并有效三角"的标题和描述指向的是一个关于如何在Tab组件下方添加动态下划线和切换时伴随的小三角形指示器的实现方法。这种设计通常用于指示当前选中的Tab项,提升用户体验。 Tab组件是UI设计中的一个...

    基于MFC的OpenGL几种基本用法(画线、画圆)

    本教程将深入讲解如何在MFC的单文档应用中集成OpenGL,实现基本的画线、画圆和画折线功能,以及创建画笔和笔刷。 1. **MFC与OpenGL集成** MFC是微软提供的一个C++类库,用于简化Windows应用程序的开发。在MFC中...

    win32 opengl画线

    "win32 opengl画线"这个主题涉及到了在Microsoft Windows环境下,利用OpenGL库来创建和显示简单的线条。OpenGL是一个跨语言、跨平台的编程接口,用于生成2D和3D图像。在Visual Studio 2012这样的IDE中,我们可以配置...

    一个用MFC VC 写的小程序,可以用来画线,里面有详解每句的意思

    当然,实际的程序可能会更复杂,可能包含用户交互,如鼠标点击选择起始点和结束点,或者使用键盘控制画线等。 在学习这个程序时,重点应该放在理解MFC框架的工作原理,如消息映射、事件处理、对象生命周期管理以及...

    EasyGDI_颜色_画线_画图_gdi_

    本教程“EasyGDI_颜色_画线_画图_gdi_”着重于利用GDI进行基本的图形绘制,包括画线、画图以及调整线条和填充的颜色。 首先,让我们了解一下GDI的基本概念。GDI是Windows操作系统内核的一部分,它提供了一系列API...

    OpenGL c++ 鼠标键盘交互 梁友栋算法 裁剪

    在本项目中,我们将讨论如何利用OpenGL和C++实现鼠标和键盘的交互功能,特别是梁友栋算法在裁剪操作中的应用。 首先,我们要理解OpenGL的基本工作流程。OpenGL是一个状态机,通过设置一系列的状态(如颜色、深度...

    基于Proteus仿真的4X4矩阵键盘

    矩阵键盘是一种节省引脚资源的键盘设计,4X4矩阵键盘由4条行线和4条列线交叉组成,可以实现16个按键的识别。通过轮询或中断方式检测行线和列线的电平变化,可以确定哪个按键被按下。 Proteus是一款强大的电子电路...

    易语言源码易语言画板软键盘源码.rar

    - 调试技巧:利用易语言的调试工具,可以逐行执行代码,查看变量状态,帮助理解程序运行流程并定位问题。 5. **扩展与优化**: - 功能扩展:源码可以作为基础,添加更多功能,如保存和加载画作,添加特效滤镜等。...

    易语言源码模拟键盘与动画窗口.zip

    窗口画图是通过在窗口的画图事件中进行图形绘制,例如使用“画线”、“填充区域”等命令。定时器则用于设置周期性的事件,比如每秒更新一次窗口内容。通过不断改变图形的位置、大小、颜色等属性,可以实现各种动画...

    WPF手写输入+虚拟键盘源码

    `InkCanvas`允许用户在上面画线,模拟手写过程,同时可以与识别库结合,将线条数据转化为文字。虚拟键盘可能通过创建自定义的UI元素,如按钮,结合`KeyEventArgs`事件处理键入,同时利用`ApplicationSettingsBase`类...

Global site tag (gtag.js) - Google Analytics