我的“M.Y SwingJava”Java编辑器

“M.Y SwingJava”Java编辑器简介

 “M.Y SwingJava”Java编辑器简称:SwingJava。是个用于编写Java的编辑器,简单地说就是类似于Jcreator等的Java编辑开发工具器,虽然它功能没有专业的Java编辑器那么完善,但它运用了JFC独特的Swing技术,不依赖于操作系统GUI,独特的Swing GUI界面感觉令人耳目一新,而且操作简单,使用方便,安装文件大小也只有650K。

经过近两个多月的个人努力,该软件一期工程在2004年4月底完成,软件代码量约近4000行,编码语言主要选用了Java JFC,一小部分用Visual Basic6.0。

l         主要功能

1.     新建JAVA源文件,或新建一项工程项目。

2.     编译或运行JAVA源文件、JAVA工程项目。

3.     代码打印功能,一次性保存所有打开的Java源文件。

4.     历史记录功能,记录最近打开的JAVA源文件和工程文件。

5.     查找和替换功能,显示当前光标所在行等。

l         开发目标

1.让用户体验Java独特的Swing界面。

2.基于JFC垮平台技术,经少许改动便可Code Once, Run Anywhere。

    3.开放性源代码,可对该软件类文件进行反编译,便于互联网中各编程爱好者互相交流和学习。

l         主要技术特点

1.用先进先出(FIFO)队列记录用户曾经打开过的JAVA源文件。

2.仿照《操作系统》磁盘空闲块记录距阵,记录处于打开状态的JAVA源文件(打开置1,关闭置0)。

3.创建子进程,调用另一个现成的可执行VB程序或批处理系统命令来编译或运行源文件或工程,使用Proccess实例来控制或获取子进程信息。

4.相对繁杂的JFC代码促使软件界面开发技术要求较高。

l         成功案例

1.编译和运行ChatClient.java单个文件。(文件数: 1个,代码量:10行左右)

2.编译和运行工程文件SampleOfBank.myp。(文件数:7个,代码量:200行左右)

3.编译和运行工程文件SwingJava.mpy。(文件数:30几个,代码量:4000行左右)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 66
    评论
下面是一个简单的 Java Swing 实现俄罗斯方块的代码示例: ```java import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Point; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.util.ArrayList; import java.util.Random; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.Timer; public class Tetris extends JPanel implements ActionListener, KeyListener { private static final long serialVersionUID = 1L; private final int WIDTH = 10; private final int HEIGHT = 22; private Timer timer; private boolean isFallingFinished = false; private boolean isStarted = false; private boolean isPaused = false; private int numLinesRemoved = 0; private int curX = 0; private int curY = 0; private JLabel statusbar; private Shape curPiece; private Shape.Tetrominoes[] board; public Tetris(JFrame parent) { initTetris(parent); } private void initTetris(JFrame parent) { setFocusable(true); curPiece = new Shape(); timer = new Timer(400, this); timer.start(); statusbar = new JLabel(" 0"); parent.add(statusbar, BorderLayout.SOUTH); board = new Shape.Tetrominoes[WIDTH * HEIGHT]; addKeyListener(this); clearBoard(); } public void actionPerformed(ActionEvent e) { if (isFallingFinished) { isFallingFinished = false; newPiece(); } else { oneLineDown(); } } private int squareWidth() { return (int) getSize().getWidth() / WIDTH; } private int squareHeight() { return (int) getSize().getHeight() / HEIGHT; } private Shape.Tetrominoes shapeAt(int x, int y) { return board[(y * WIDTH) + x]; } public void start() { if (isPaused) return; isStarted = true; isFallingFinished = false; numLinesRemoved = 0; clearBoard(); newPiece(); timer.start(); } private void pause() { if (!isStarted) return; isPaused = !isPaused; if (isPaused) { timer.stop(); statusbar.setText("paused"); } else { timer.start(); statusbar.setText(String.valueOf(numLinesRemoved)); } repaint(); } public void paint(Graphics g) { super.paint(g); Dimension size = getSize(); int boardTop = (int) size.getHeight() - HEIGHT * squareHeight(); for (int i = 0; i < HEIGHT; ++i) { for (int j = 0; j < WIDTH; ++j) { Shape.Tetrominoes shape = shapeAt(j, HEIGHT - i - 1); if (shape != Shape.Tetrominoes.NoShape) drawSquare(g, j * squareWidth(), boardTop + i * squareHeight(), shape); } } if (curPiece.getShape() != Shape.Tetrominoes.NoShape) { for (int i = 0; i < 4; ++i) { int x = curX + curPiece.getX(i); int y = curY - curPiece.getY(i); drawSquare(g, x * squareWidth(), boardTop + (HEIGHT - y - 1) * squareHeight(), curPiece.getShape()); } } } private void dropDown() { int newY = curY; while (newY > 0) { if (!tryMove(curPiece, curX, newY - 1)) break; --newY; } pieceDropped(); } private void oneLineDown() { if (!tryMove(curPiece, curX, curY - 1)) pieceDropped(); } private void clearBoard() { for (int i = 0; i < HEIGHT * WIDTH; ++i) board[i] = Shape.Tetrominoes.NoShape; } private void pieceDropped() { for (int i = 0; i < 4; ++i) { int x = curX + curPiece.getX(i); int y = curY - curPiece.getY(i); board[(y * WIDTH) + x] = curPiece.getShape(); } removeFullLines(); if (!isFallingFinished) newPiece(); } private void newPiece() { curPiece.setRandomShape(); curX = WIDTH / 2 + 1; curY = HEIGHT - 1 + curPiece.minY(); if (!tryMove(curPiece, curX, curY)) { curPiece.setShape(Shape.Tetrominoes.NoShape); timer.stop(); isStarted = false; statusbar.setText("game over"); } } private boolean tryMove(Shape newPiece, int newX, int newY) { for (int i = 0; i < 4; ++i) { int x = newX + newPiece.getX(i); int y = newY - newPiece.getY(i); if (x < 0 || x >= WIDTH || y < 0 || y >= HEIGHT) return false; if (shapeAt(x, y) != Shape.Tetrominoes.NoShape) return false; } curPiece = newPiece; curX = newX; curY = newY; repaint(); return true; } private void removeFullLines() { int numFullLines = 0; for (int i = HEIGHT - 1; i >= 0; --i) { boolean lineIsFull = true; for (int j = 0; j < WIDTH; ++j) { if (shapeAt(j, i) == Shape.Tetrominoes.NoShape) { lineIsFull = false; break; } } if (lineIsFull) { ++numFullLines; for (int k = i; k < HEIGHT - 1; ++k) { for (int j = 0; j < WIDTH; ++j) board[(k * WIDTH) + j] = shapeAt(j, k + 1); } } } if (numFullLines > 0) { numLinesRemoved += numFullLines; statusbar.setText(String.valueOf(numLinesRemoved)); isFallingFinished = true; curPiece.setShape(Shape.Tetrominoes.NoShape); repaint(); } } private void drawSquare(Graphics g, int x, int y, Shape.Tetrominoes shape) { Color colors[] = { new Color(0, 0, 0), new Color(204, 102, 102), new Color(102, 204, 102), new Color(102, 102, 204), new Color(204, 204, 102), new Color(204, 102, 204), new Color(102, 204, 204), new Color(218, 170, 0) }; Color color = colors[shape.ordinal()]; g.setColor(color); g.fillRect(x + 1, y + 1, squareWidth() - 2, squareHeight() - 2); g.setColor(color.brighter()); g.drawLine(x, y + squareHeight() - 1, x, y); g.drawLine(x, y, x + squareWidth() - 1, y); g.setColor(color.darker()); g.drawLine(x + 1, y + squareHeight() - 1, x + squareWidth() - 1, y + squareHeight() - 1); g.drawLine(x + squareWidth() - 1, y + squareHeight() - 1, x + squareWidth() - 1, y + 1); } public void keyPressed(KeyEvent e) { if (!isStarted || curPiece.getShape() == Shape.Tetrominoes.NoShape) { return; } int keycode = e.getKeyCode(); if (keycode == 'p' || keycode == 'P') { pause(); return; } if (isPaused) return; switch (keycode) { case KeyEvent.VK_LEFT: tryMove(curPiece, curX - 1, curY); break; case KeyEvent.VK_RIGHT: tryMove(curPiece, curX + 1, curY); break; case KeyEvent.VK_DOWN: tryMove(curPiece.rotateRight(), curX, curY); break; case KeyEvent.VK_UP: tryMove(curPiece.rotateLeft(), curX, curY); break; case KeyEvent.VK_SPACE: dropDown(); break; case 'd': case 'D': oneLineDown(); break; } } public void keyReleased(KeyEvent e) { } public void keyTyped(KeyEvent e) { } } class Shape { enum Tetrominoes { NoShape, ZShape, SShape, LineShape, TShape, SquareShape, LShape, MirroredLShape }; private Tetrominoes pieceShape; private int coords[][]; private int[][][] coordsTable; public Shape() { coords = new int[4][2]; setShape(Tetrominoes.NoShape); } public void setShape(Tetrominoes shape) { coordsTable = new int[][][] { { { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 } }, { { 0, -1 }, { 0, 0 }, { -1, 0 }, { -1, 1 } }, { { 0, -1 }, { 0, 0 }, { 1, 0 }, { 1, 1 } }, { { 0, -1 }, { 0, 0 }, { 0, 1 }, { 0, 2 } }, { { -1, 0 }, { 0, 0 }, { 1, 0 }, { 0, 1 } }, { { 0, 0 }, { 1, 0 }, { 0, 1 }, { 1, 1 } }, { { -1, -1 }, { 0, -1 }, { 0, 0 }, { 0, 1 } }, { { 1, -1 }, { 0, -1 }, { 0, 0 }, { 0, 1 } } }; for (int i = 0; i < 4; i++) { for (int j = 0; j < 2; ++j) { coords[i][j] = coordsTable[shape.ordinal()][i][j]; } } pieceShape = shape; } private void setX(int index, int x) { coords[index][0] = x; } private void setY(int index, int y) { coords[index][1] = y; } public int x(int index) { return coords[index][0]; } public int y(int index) { return coords[index][1]; } public Tetrominoes getShape() { return pieceShape; } public void setRandomShape() { Random r = new Random(); int x = Math.abs(r.nextInt()) % 7 + 1; Tetrominoes[] values = Tetrominoes.values(); setShape(values[x]); } public int minX() { int m = coords[0][0]; for (int i = 0; i < 4; i++) { m = Math.min(m, coords[i][0]); } return m; } public int minY() { int m = coords[0][1]; for (int i = 0; i < 4; i++) { m = Math.min(m, coords[i][1]); } return m; } public Shape rotateLeft() { if (pieceShape == Tetrominoes.SquareShape) return this; Shape result = new Shape(); result.pieceShape = pieceShape; for (int i = 0; i < 4; ++i) { result.setX(i, y(i)); result.setY(i, -x(i)); } return result; } public Shape rotateRight() { if (pieceShape == Tetrominoes.SquareShape) return this; Shape result = new Shape(); result.pieceShape = pieceShape; for (int i = 0; i < 4; ++i) { result.setX(i, -y(i)); result.setY(i, x(i)); } return result; } public int getX(int index) { return coords[index][0]; } public int getY(int index) { return coords[index][1]; } } public class TetrisGame extends JFrame { private static final long serialVersionUID = 1L; public TetrisGame() { initUI(); } private void initUI() { Tetris board = new Tetris(this); add(board); setTitle("Tetris"); setSize(400, 700); setDefaultCloseOperation(EXIT_ON_CLOSE); setLocationRelativeTo(null); } public static void main(String[] args) { TetrisGame game = new TetrisGame(); game.setVisible(true); } } ``` 这个代码示例可以直接运行,实现了一个简单的俄罗斯方块游戏。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 66
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值