2015年2月19日 星期四

[Java] resize image + imagebutton

  1.  // resize image + make imagebutton

  2.  JPanel panel = new JPanel();
  3.              panel.setLayout(null); // set 了layout是null後必需調用setBounds
  4.              panel.setBounds(0, 0, 200 , 200); // 參數1: x座標; 2:y座標; 3:width; 4:height

  5.              
  6.      ImageIcon img = new ImageIcon(getClass().getResource("/lam/images/1.jpg"));
  7.  
  8.               // resize img width and height to 100,100

  9.               Image image = img.getImage();
  10.               Image newimg = image.getScaledInstance(100, 100, java.awt.Image.SCALE_SMOOTH);
  11.               img = new ImageIcon(newimg);
  12.  
  13.                // add image to button
  14.                              
  15.               JButton btn = new JButton();
  16.               btn.setBorder(LineBorder.createGrayLineBorder());
  17.               btn.setIcon(img);  
  18.               btn.setBounds(0, 0, 150, 120);

  19.       panel.add(btn);



2015年2月9日 星期一

[java] 字母貪食蛇小遊戲 - Object、GUI、keylistener的應用






字母貪食蛇小遊戲 - Object、GUI、KeyListener的應用。




































  1. /*
  2.  * To change this license header, choose License Headers in Project Properties.
  3.  * To change this template file, choose Tools | Templates
  4.  * and open the template in the editor.
  5.  */

  6. package snakegui;

  7. /**
  8.  *
  9.  * @author kongyinlam
  10.  */
  11. import java.awt.*;
  12. import javax.swing.*;
  13. import java.awt.event.*;
  14. import java.util.*;
  15. public class SnakeGUI {

  16.     /**
  17.      * @param args the command line arguments
  18.      */
  19.     public static void main(String[] args) {
  20.            SnakeGame sg = new SnakeGame(20,30);
  21.                      sg.play('w');
  22.     }
  23.    
  24. }
  25. class SnakeGame implements KeyListener{
  26.       Board b;
  27.       ArrayList<Token> tokens;
  28.       int py, px;
  29.       boolean isEaten=false;
  30.       public SnakeGame(int h, int w){
  31.              b = new Board(h, w, this);
  32.                          
  33.              tokens = new ArrayList<>();
  34.              for(int i=0; i<4; i++){
  35.                  Token token = new Token(this, b, tokens.size());
  36.                  token.setInitPos();
  37.                  tokens.add(token);
  38.              }
  39.             
  40.                            
  41.       }
  42.       public void play(char key){
  43.                  
  44.                   b.clearBoard();
  45.                  
  46.                   if(isEaten) eaten();
  47.                  
  48.                   for(Token tokenss: tokens)
  49.                      tokenss.MoveToken(key);
  50.                  
  51.                   b.paintBoard();
  52.       }
  53.        public void eaten(){
  54.              isEaten = false;
  55.              Token token = new Token(this, b, tokens.size());
  56.              token.y = tokens.get(tokens.size()-1).y;
  57.              token.x = tokens.get(tokens.size()-1).x;
  58.              token.c = tokens.get(0).c;
  59.              tokens.add(token);
  60.              tokens.get(0).y = new Random().nextInt(b.h-3)+1;
  61.              tokens.get(0).x = new Random().nextInt(b.w-3)+1;
  62.              tokens.get(0).c = (char)(new Random().nextInt(26)+97);
  63.             
  64.       }

  65.     @Override
  66.     public void keyTyped(KeyEvent e) {
  67.            try{
  68.            char key = (""+e.getKeyChar()).toLowerCase().charAt(0);
  69.            if(key=='w'||key=='s'||key=='a'||key=='d')
  70.                    play(key);
  71.            }
  72.            catch(Exception ee){}
  73.      }

  74.     @Override
  75.     public void keyPressed(KeyEvent e) {
  76.                 throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.

  77.     }

  78.     @Override
  79.     public void keyReleased(KeyEvent e) {
  80.         throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
  81.     }

  82. }
  83. class Token{
  84.       SnakeGame sg;
  85.       Board b;
  86.       int id;
  87.       int y,x;
  88.       char c;
  89.       public Token(SnakeGame sg, Board b, int id){
  90.              this.sg = sg;
  91.              this.b = b;
  92.              this.id = id;
  93.              c = (char)(new Random().nextInt(26)+97);
  94.             
  95.       }
  96.       public void setInitPos(){
  97.              if(id==0){
  98.                     y = 10;
  99.                     x = 10;
  100.              }
  101.              else {
  102.                     y = b.h-4+id;
  103.                     x = b.w-4;
  104.              }
  105.             
  106.       }
  107.       public void MoveToken(char k){
  108.              if(id!=0){
  109.                 if(id==1){
  110.                     sg.py = y;
  111.                     sg.px = x;
  112.                     switch(k){
  113.                         case 'w' : y-=1; break;
  114.                         case 's' : y+=1; break;
  115.                         case 'd' : x+=1; break;
  116.                         case 'a' : x-=1; break;
  117.                     }
  118.                     if(b.layout[y][x]=='*') JOptionPane.showMessageDialog(null, "GameOver", "Result", JOptionPane.INFORMATION_MESSAGE);
  119.                     else if(y==sg.tokens.get(0).y&&x==sg.tokens.get(0).x){
  120.                             sg.isEaten=true;
  121.                     }
  122.                 }
  123.                 else{
  124.                     int ty = y;
  125.                     int tx = x;
  126.                     y = sg.py;
  127.                     x = sg.px;
  128.                     sg.py = ty;
  129.                     sg.px = tx;
  130.                 }
  131.              }
  132.              b.layout[y][x] = c;
  133.       }
  134.     
  135. }
  136. class Board{
  137.       JFrame f;
  138.       int h,w;
  139.       char[][] layout;
  140.       public Board(int h, int w, SnakeGame sg){
  141.              this.h = h;
  142.              this.w = w;
  143.             
  144.              f = new JFrame();            
  145.              f.setSize(w*20, h*30);
  146.              Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
  147.              f.setLocation(dim.width/2-f.size().width/2, dim.height/2-f.size().height/2);            
  148.              f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  149.             
  150.              f.setLayout(new GridBagLayout());
  151.              f.addKeyListener(sg);
  152.             
  153.              layout = new char [h][w];

  154.           
  155.             
  156.       }
  157.       public void clearBoard(){
  158.              f.getContentPane().removeAll();

  159.              for(int i=0; i<h; i++){
  160.              for(int j=0; j<w; j++){
  161.                  if(i==0||i==h-1||j==0||j==w-1) layout[i][j]='*';
  162.                  else layout[i][j]=' ';
  163.              }                
  164.              }
  165.       }
  166.       public void paintBoard(){
  167.             
  168.              for(int i=0; i<h; i++){
  169.              for(int j=0; j<w; j++){
  170.                  GridBagConstraints gbc = new GridBagConstraints();
  171.                  JLabel lb = new JLabel(""+layout[i][j]);
  172.                  gbc.gridx = j;
  173.                  gbc.gridy = i;
  174.                  gbc.ipadx = 10;
  175.                  gbc.ipady = 2;
  176.                  gbc.anchor = GridBagConstraints.CENTER;
  177.                  f.add(lb, gbc);
  178.              }
  179.              }
  180.              f.getContentPane().repaint();
  181.              f.setVisible(true);
  182.       }
  183.      
  184. }