围棋
package ch11;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.imageio.*;
import java.io.*;
public class Gobang
{
BufferedImage table;
BufferedImage black;
BufferedImage white;
BufferedImage selected;
private static int BOARD_SIZE = 15;
private final int TABLE_WIDTH = 535;
private final int TABLE_HETGHT = 536;
private final int RATE = TABLE_WIDTH / BOARD_SIZE;
private final int X_OFFSET = 5;
private final int Y_OFFSET = 6;
private String[][] board = new String[BOARD_SIZE][BOARD_SIZE];
JFrame f = new JFrame("五子棋游戏");
ChessBoard chessBoard = new ChessBoard();
private int selectedX = -1;
private int selectedY = -1;
public void init()throws Exception
{
table = ImageIO.read(new File("image/board.jpg"));
black = ImageIO.read(new File("image/black.gif"));
white = ImageIO.read(new File("image/white.gif"));
selected = ImageIO.read(new File("image/selected.gif"));
for (int i = 0 ; i < BOARD_SIZE ; i++)
{
for ( int j = 0 ; j < BOARD_SIZE ; j++)
{
board[i][j] = "╋";
}
}
chessBoard.setPreferredSize(new Dimension(
TABLE_WIDTH , TABLE_HETGHT));
chessBoard.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
int xPos = (int)((e.getX() - X_OFFSET) / RATE);
int yPos = (int)((e.getY() - Y_OFFSET ) / RATE);
board[xPos][yPos] = "●";
chessBoard.repaint();
}
public void mouseExited(MouseEvent e)
{
selectedX = -1;
selectedY = -1;
chessBoard.repaint();
}
});
chessBoard.addMouseMotionListener(new MouseMotionAdapter()
{
public void mouseMoved(MouseEvent e)
{
selectedX = (e.getX() - X_OFFSET) / RATE;
selectedY = (e.getY() - Y_OFFSET) / RATE;
chessBoard.repaint();
}
});
f.add(chessBoard);
f.pack();
f.setVisible(true);
}
public static void main(String[] args)throws Exception
{
Gobang gb = new Gobang();
gb.init();
}
class ChessBoard extends JPanel
{
public void paint(Graphics g)
{
g.drawImage(table , 0 , 0 , null);
if (selectedX >= 0 && selectedY >= 0)
g.drawImage(selected , selectedX * RATE + X_OFFSET ,
selectedY * RATE + Y_OFFSET, null);
for (int i = 0 ; i < BOARD_SIZE ; i++)
{
for ( int j = 0 ; j < BOARD_SIZE ; j++)
{
if (board[i][j].equals("●"))
{
g.drawImage(black , i * RATE + X_OFFSET
, j * RATE + Y_OFFSET, null);
}
if (board[i][j].equals("○"))
{
g.drawImage(white, i * RATE + X_OFFSET
, j * RATE + Y_OFFSET, null);
}
}
}
}
}
}

手绘
package ch11;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
public class HandDraw
{
private final int AREA_WIDTH = 500;
private final int AREA_HEIGHT = 400;
private int preX = -1;
private int preY = -1;
PopupMenu pop = new PopupMenu();
MenuItem redItem = new MenuItem("红色");
MenuItem greenItem = new MenuItem("绿色");
MenuItem blueItem = new MenuItem("蓝色");
BufferedImage image = new BufferedImage(AREA_WIDTH
, AREA_HEIGHT , BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
private Frame f = new Frame("简单手绘程序");
private DrawCanvas drawArea = new DrawCanvas();
private Color foreColor = new Color(255, 0 ,0);
public void init()
{
ActionListener menuListener = e ->
{
if (e.getActionCommand().equals("绿色"))
{
foreColor = new Color(0 , 255 , 0);
}
if (e.getActionCommand().equals("红色"))
{
foreColor = new Color(255 , 0 , 0);
}
if (e.getActionCommand().equals("蓝色"))
{
foreColor = new Color(0 , 0 , 255);
}
};
redItem.addActionListener(menuListener);
greenItem.addActionListener(menuListener);
blueItem.addActionListener(menuListener);
pop.add(redItem);
pop.add(greenItem);
pop.add(blueItem);
drawArea.add(pop);
g.fillRect(0 , 0 ,AREA_WIDTH , AREA_HEIGHT);
drawArea.setPreferredSize(new Dimension(AREA_WIDTH , AREA_HEIGHT));
drawArea.addMouseMotionListener(new MouseMotionAdapter()
{
public void mouseDragged(MouseEvent e)
{
if (preX > 0 && preY > 0)
{
g.setColor(foreColor);
g.drawLine(preX , preY , e.getX() , e.getY());
}
preX = e.getX();
preY = e.getY();
drawArea.repaint();
}
});
drawArea.addMouseListener(new MouseAdapter()
{
public void mouseReleased(MouseEvent e)
{
if (e.isPopupTrigger())
{
pop.show(drawArea , e.getX() , e.getY());
}
preX = -1;
preY = -1;
}
});
f.add(drawArea);
f.pack();
f.setVisible(true);
}
public static void main(String[] args)
{
new HandDraw().init();
}
class DrawCanvas extends Canvas
{
public void paint(Graphics g)
{
g.drawImage(image , 0 , 0 , null);
}
}
}

弹球游戏
package ch11;
import java.util.Random;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
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;
private int xSpeed = (int)(ySpeed * xyRate * 2);
private int ballX = rand.nextInt(200) + 20;
private int ballY = rand.nextInt(10) + 20;
private int racketX = rand.nextInt(200);
private MyCanvas tableArea = new MyCanvas();
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;
}
if (ke.getKeyCode() == KeyEvent.VK_RIGHT)
{
if (racketX < TABLE_WIDTH - RACKET_WIDTH)
racketX += 10;
}
}
};
f.addKeyListener(keyProcessor);
tableArea.addKeyListener(keyProcessor);
ActionListener taskPerformer = evt ->
{
if (ballX <= 0 || ballX >= TABLE_WIDTH - BALL_SIZE)
{
xSpeed = -xSpeed;
}
if (ballY >= RACKET_Y - BALL_SIZE &&
(ballX < racketX || ballX > racketX + RACKET_WIDTH))
{
timer.stop();
isLose = true;
tableArea.repaint();
}
else if (ballY <= 0 ||
(ballY >= RACKET_Y - BALL_SIZE
&& ballX > racketX && ballX <= racketX + RACKET_WIDTH))
{
ySpeed = -ySpeed;
}
ballY += ySpeed;
ballX += xSpeed;
tableArea.repaint();
};
timer = new Timer(100, taskPerformer);
timer.start();
f.pack();
f.setVisible(true);
}
public static void main(String[] args)
{
new PinBall().init();
}
class MyCanvas extends Canvas
{
public void paint(Graphics g)
{
if (isLose)
{
g.setColor(new Color(255, 0, 0));
g.setFont(new Font("Times" , 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);
}
}
}
}

剪贴板
package ch11;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.datatransfer.*;
public class SimpleClipboard {
private Frame f = new Frame("简单的剪贴板程序");
private Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
private TextArea jtaCopyTo = new TextArea(5,20);
private TextArea jtaPaste = new TextArea(5,20);
private Button btCopy = new Button("复制");
private Button btPaste = new Button("粘贴");
public void init() {
Panel p = new Panel();
p.add(btCopy);
p.add(btPaste);
btCopy.addActionListener(event ->{
StringSelection contents = new StringSelection(jtaCopyTo.getText());
clipboard.setContents(contents,null);
});
btPaste.addActionListener(event ->{
if (clipboard.isDataFlavorAvailable(DataFlavor.stringFlavor)) {
try {
String content = (String)clipboard.getData(DataFlavor.stringFlavor);
jtaPaste.append(content);
} catch (Exception e) {
e.printStackTrace();
}
}
});
Box box = new Box(BoxLayout.X_AXIS);
box.add(jtaCopyTo);
box.add(jtaPaste);
f.add(p,BorderLayout.SOUTH);
f.add(box,BorderLayout.CENTER);
f.pack();
f.setVisible(true);
}
public static void main(String[] args) {
new SimpleClipboard().init();
}
}

监听
package ch11;
import java.awt.*;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
public class WindowListenerTest {
private Frame f = new Frame("测试");
private TextArea ta = new TextArea(6,40);
public void init() {
f.addWindowListener(new MyListener());
f.add(ta);
f.pack();
f.setVisible(true);
}
class MyListener implements WindowListener {
public void windowActivated(WindowEvent e) {
ta.append("窗口被激活!\n");
}
public void windowClosed(WindowEvent e) {
ta.append("窗口被成功关闭!\n");
}
public void windowClosing(WindowEvent e) {
ta.append("用户关闭窗口!\n");
System.exit(0);
}
public void windowDeactivated(WindowEvent e) {
ta.append("窗口失去焦点!\n");
}
public void windowDeiconified(WindowEvent e) {
ta.append("窗口被恢复!\n");
}
public void windowIconified(WindowEvent e) {
ta.append("窗口被最小化!\n");
}
public void windowOpened(WindowEvent e) {
ta.append("窗口初次被打开!\n");
}
}
public static void main(String[] args) {
new WindowListenerTest().init();
}
}
适配器
package ch11;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
public class WindowAdapterTest {
private Frame f = new Frame("测试");
private TextArea ta = new TextArea(6,40);
public void init() {
f.addWindowListener(new MyListener());
f.add(ta);
f.pack();
f.setVisible(true);
}
class MyListener extends WindowAdapter{
public void windowClosing(WindowEvent e) {
System.out.println("用户关闭窗口!\n");
System.exit(0);
}
}
public static void main(String[] args) {
new WindowAdapterTest().init();
}
}
本文转自TBHacker博客园博客,原文链接:http://www.cnblogs.com/jiqing9006/p/6132370.html,如需转载请自行联系原作者