2004-10-29

畫圖小程式範例 by swanky

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;

import javax.swing.*;

public class DrawCircle extends JApplet{

   boolean drawable = false;

   public void init(){
      super.init();

      getContentPane().add(new DrawPanel(), BorderLayout.CENTER);

      Action drawAction = new DrawAction();
      Action cancelAction = new CancelAction();

      JPanel p = new JPanel();
      p.add(new JButton(drawAction));
      p.add(new JButton(cancelAction));
      getContentPane().add(p, BorderLayout.NORTH);

      JMenu actionMenu = new JMenu("Action");
      actionMenu.add(drawAction);
      actionMenu.add(cancelAction);
      JMenuBar menuBar = new JMenuBar();
      menuBar.add(actionMenu);
      setJMenuBar(menuBar);
   }

   public static void main(String[] args){
      JApplet applet = new DrawCircle();
      JFrame frame = new JFrame("DrawCircle");

      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.getContentPane().add(applet);

      frame.setSize(500, 500);
      applet.init();
      applet.start();
      frame.setVisible(true);
   }

   class DrawAction extends AbstractAction{
      public DrawAction(){
         putValue(Action.NAME, "Draw");
         putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("ctrl D"));
      }

      public void actionPerformed(ActionEvent e){
         drawable = true;
      }
   }

   class CancelAction extends AbstractAction{
      public CancelAction(){
         putValue(Action.NAME, "Cancel");
         putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("ctrl C"));
      }

      public void actionPerformed(ActionEvent e){
         drawable = false;
      }
   }

   class DrawPanel extends JPanel implements MouseListener, MouseMotionListener{
      Point2D p1, p2;

      public DrawPanel(){
         addMouseListener(this);
         addMouseMotionListener(this);
      }

      protected void paintComponent(Graphics g){
         super.paintComponent(g);
         Graphics2D g2d = (Graphics2D)g;

         if(drawable){
            if((p1 != null) | (p2 != null)){
               Ellipse2D e = new Ellipse2D.Double(p1.getX(), p1.getY(),
                     p2.getX() - p1.getX(), p2.getY() - p1.getY());
               g2d.draw(e);
            }
         }
      }

      public void mouseClicked(MouseEvent e){}

      public void mousePressed(MouseEvent e){
         if(drawable){
            p1 = (Point2D)e.getPoint();
         }
      }

      public void mouseReleased(MouseEvent e){
         if(drawable){
            p2 = (Point2D)e.getPoint();
            repaint();
         }
      }

      public void mouseEntered(MouseEvent e){}
      public void mouseExited(MouseEvent e){}
      public void mouseDragged(MouseEvent e){}
      public void mouseMoved(MouseEvent e){}
   }
}

畫圓小程式 by shumi

程式碼~
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;

import javax.swing.*;

public class DrawCircleApp extends JApplet{

   boolean type = false;

   public void init(){
      super.init();
      getContentPane().add(new DrawPanel(), BorderLayout.CENTER);
      Action c = new CircleAction();
      Action a = new CancleAction();

      JPanel p = new JPanel();
      p.add(new JButton(c));
      p.add(new JButton(a));
      getContentPane().add(p, BorderLayout.NORTH);
      final JMenu fileMenu = new JMenu("Action");
      fileMenu.add(c);
      fileMenu.add(a);
      final JMenuBar menuBar = new JMenuBar();

      menuBar.add(fileMenu);
      setJMenuBar(menuBar);
   }

   public static void main(String[] args){
      JApplet applet = new DrawCircleApp();
      JFrame frame = new JFrame("DrawCircle");
      // To close the application:
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.getContentPane().add(applet);
      frame.setSize(100, 50);
      applet.init();
      applet.start();
      frame.setVisible(true);
   }

   class CircleAction extends AbstractAction{
      public CircleAction(){
         putValue(Action.NAME, "畫圓");
         putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("ctrl C"));
      }

      public void actionPerformed(ActionEvent e){
         type = true;
      }

   }

   class CancleAction extends AbstractAction{
      public CancleAction(){
         putValue(Action.NAME, "清空");
         putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("ctrl D"));
      }

      public void actionPerformed(ActionEvent e){
         type = false;

      }

   }

   class DrawPanel extends JPanel implements MouseListener, MouseMotionListener{
      Point2D p1, p2;

      public DrawPanel(){
         addMouseListener(this);
         addMouseMotionListener(this);
      }

      protected void paintComponent(Graphics g){
         super.paintComponent(g);
         Graphics2D g2d = (Graphics2D)g;
         if(type){
            if((p1 == null) | (p2 == null)){
               return;
            }

            Ellipse2D e = new Ellipse2D.Double(p1.getX(), p1.getY(), p2.getX()
                  - p1.getX(), p2.getY() - p1.getY());
            g2d.draw(e);
         }

      }

      public void mouseClicked(MouseEvent e){}

      public void mousePressed(MouseEvent e){
         p1 = (Point2D)e.getPoint();
      }

      public void mouseReleased(MouseEvent e){
         p2 = (Point2D)e.getPoint();
         repaint();
      }

      public void mouseEntered(MouseEvent e){}

      public void mouseExited(MouseEvent e){}

      public void mouseDragged(MouseEvent e){}

      public void mouseMoved(MouseEvent e){}

   }
}

Singleton範例圖(架構圖) by shumi


List1 Singleton類別
public class Singleton{

   private static Singleton singleton = new Singleton();

   private Singleton(){
      System.out.println("已產生物件個體");
   }

   public static Singleton getInstance(){
      return singleton;
   }

}
List2 Mian類別
public class Main{

   public static void main(String[] args){
      System.out.println("Start.");
      Singleton obj1 = Singleton.getInstance();
      Singleton obj2 = Singleton.getInstance();
      if(obj1 == obj2){
         System.out.println("obj1和obj2是同一物件個體");
      }else {
         System.out.println("obj1和obj2並非同一物件個體");
      }
      System.out.println("End.");
   }
}

Factory架構圖 by shumi


Factory範例圖 by shumi


List1 Product類別
package framework;

public abstract class Product{
   public abstract void use();
}
List2 Factory類別
package framework;

public abstract class Factory{

   private Product lnkProduct;

   public final Product create(String owner){
      Product p = createProduct(owner);
      registerProduct(p);
      return p;
   }

   protected abstract Product createProduct(String owner);

   protected abstract void registerProduct(Product product);

}
List3 IDCard類別
package idcard;
import framework.*;

public class IDCard extends Product{
   private String owner;

   IDCard(String owner){
      System.out.println("建立" + owner + "的卡。");
      this.owner = owner;
   }

   public void use(){
      System.out.println("使用" + owner + "的卡。");
   }

   public String getOwner(){
      return owner;
   }
}
List4 IDCardFactory類別
package idcard;
import framework.*;
import java.util.*;

public class IDCardFactory extends Factory{

   private IDCard lnkIDCard;
   private Vector owners = new Vector();

   protected Product createProduct(String owner){
      return new IDCard(owner);
   }
   protected void registerProduct(Product product){
      owners.add(((IDCard)product).getOwner());
   }
   public Vector getOwners(){
      return owners;
   }

}
List5 Main類別
import framework.*;
import idcard.*;

public class Main{

   public static void main(String[] args){
      Factory factory = new IDCardFactory();
      Product card1 = factory.create("結城浩");
      Product card2 = factory.create("戶村");
      Product card3 = factory.create("佐藤花子");
      card1.use();
      card2.use();
      card3.use();
   }
}

Template架構圖 by shumi


Template範例圖 by shumi


List1 AbstractDisplay類別
public abstract class AbstractDisplay{

   public abstract void open();

   public abstract void print();

   public abstract void close();

   public final void display(){
      open();
      for(int i = 0; i < 5; i++){
         print();
      }
      close();
   }
}
List2 CharDisplay類別
public class CharDisplay extends AbstractDisplay{
   private char ch;

   public CharDisplay(char ch){
      this.ch = ch;
   }

   public void open(){
      System.out.print("<<");
   }

   public void print(){
      System.out.print(ch);
   }

   public void close(){
      System.out.println(">>");
   }
}
List3 StringDisplay類別
public class StringDisplay extends AbstractDisplay{
   private String string;
   private int width;

   public StringDisplay(String string){
      this.string = string;
      this.width = string.getBytes().length;
   }

   public void open(){
      printLine();
   }

   public void print(){
      System.out.println("|" + string + "|");
   }

   public void close(){
      printLine();
   }

   private void printLine(){
      System.out.print("+");
      for(int i = 0; i < width; i++){
         System.out.print("-");
      }
      System.out.println("+");
   }
}
List4 Main類別
public class Main{

   public static void main(String[] args){
      AbstractDisplay d1 = new CharDisplay('H');
      AbstractDisplay d2 = new StringDisplay("Hello, world.");
      AbstractDisplay d3 = new StringDisplay("您好。");
      d1.display();
      d2.display();
      d3.display();
   }
}

2004-10-26

2004-10-22

成員ID

目前我們Party506 Blog的成員ID

  • anshon
  • fansia_yen
  • queena-yin
  • shumi_chun
  • swanky-hsiao
  • yann_fang
也就是大家登入Blogger的ID啦~
不要連密碼都忘掉了喔... @.@"

第二個作業

就是今天大家練習的東西
Hello JSP Using Eclipse這個教學中的最後一個使用JSTL執行成功的JSP頁面
裡面輸入自己的名字,貼出來就可以了~

還有我已經幫大家改好標題了
以後交作業的標題後面就加上一個by 作者
Design Pattern的作業
如果是範例圖的話
要加上程式碼
記得程式碼要用<pre></pre>包起來才能固定格式喔~

2004-10-15

使用Eclipse與Sysdeo Eclipse Tomcat Launcher plugin開發簡單的JSP程式

Hello JSP Using Eclipse
這篇應該可以造福一些初學者吧~ :)

Tontie For J2ME

不知道大家知道不知道Tontie 看名字可以有點陌生 讓我們看一下底下這個link 知道了吧 就是這個好玩的Game 好玩的是 Tontie有J2ME的版本耶!! 真是太Cool了
  • ScreenShot:
  • Cheat:
    • Press * Full health
    • Press # 1000 gold
    • Press Clear Go to the shop
    • Press Send Next level看起來是不相當好玩的樣子呢~~
而且 他還是OpenSource的喔! 可以把原始碼拿來研究一下 也可以自己寫個Tontie一類的應該滿cool的 趕快來去網站看一下http://tunah.net/~tunah/tontie/

2004-10-14

Java學習資源

Adapter(委讓)範例圖 by shumi

Adapter Pattern-2 委讓
程式碼
List 2-1 Banner 類別
public class Banner{
   private String string;
   public Banner(String string){
      this.string = string;
   }
   public void showWithParen(){
      System.out.println("(" + string + ")");
   }
   public void showWithAster(){
      System.out.println("*" + string + "*");
   }
}
List 2-2 Print類別
public abstract class Print{
   public abstract void printWeak();
   public abstract void printStrong();
}
List 2-3 PrintBanner類別
public class PrintBanner extends Print{
   private Banner banner;
   public PrintBanner(String string){
      this.banner = new Banner(string);
   }
   public void printWeak(){
      banner.showWithParen();
   }
   public void printStrong(){
      banner.showWithAster();
   }
}
List 2-4 Main類別
public class Main{
   private Print lnkPrint;

   public static void main(String[] args){
      Print p = new PrintBanner("Hello");
      p.printWeak();
      p.printStrong();
   }
}

Adapter(繼承)範例圖 by shumi

Adapter Pattern-1繼承
程式碼
List 2-1 Banner類別
public class Banner{
   private String string;
   public Banner(String string){
      this.string = string;
   }
   public void showWithParen(){
      System.out.println("(" + string + ")");
   }
   public void showWithAster(){
      System.out.println("*" + string + "*");
   }
}
List 2-2 Print介面
public interface Print{
   public abstract void printWeak();
   public abstract void printStrong();
}
List 2-3 PrintBanner類別
public class PrintBanner extends Banner implements Print{
   public PrintBanner(String string){
      super(string);
   }
   public void printWeak(){
      showWithParen();
   }
   public void printStrong(){
      showWithAster();
   }
}
List 2-4 Main類別
public class Main{
   /**
    * @stereotype Uses
    */

   private Print lnkPrint;

   public static void main(String[] args){
      Print p = new PrintBanner("Hello");
      p.printWeak();
      p.printStrong();
   }
}

Adapter架構圖 by shumi

Adapter Pattern分兩種 上為繼承 下為委讓

Iterator架構圖 by shumi

Iterator Pattern

2004-10-11

PO文範本

由於預設的自動換行格式會很奇怪地加上許多換行的<br />標籤
造成版面不好控制
所以之後大家就直接用標準的XHTML語法來po文章吧
最簡單的方式就是在每一行後面,加上換行的<br />標籤
我也幫大家準備了一個範本
大家po完文章記得把這些文字弄掉喔~ :)

<!-- 範本
段落:<p></p>
換行:<br />
固定格式:<pre></pre>
超連結:<a href=""></a>
加強:<em></em>
強調:<strong></strong>
有序列表:
<ol>
  <li></li>
</ol>
無序列表:
<ul>
  <li></li>
</ul>
表格:
<table border="1">
  <tr>
    <th scope="col">&nbsp;</th>
    <th scope="col">&nbsp;</th>
  </tr>
  <tr>
    <th scope="row">&nbsp;</th>
    <td>&nbsp;</td>
  </tr>
</table>
-->

Party這三週的作業

先畫出各Pattern的UML圖,再把程式補上
要po出UML圖、程式、還有Pattern的UML架構圖
UML圖要加上名字喔~

大家加油吧~! :)
  10/8~14 10/15~21 10/22~28
shumi
  1. Iterator
  2. Adapter
  1. Template Method
  2. Factory Method
  3. Singleton
  1. Decorator
  2. Visitor
  3. Chain of Responsibility
  4. Facade
qazwe
  1. Iterator
  2. Adapter
  1. Prototype
  2. Builder
  3. Abstract Factory
  1. Mediator
  2. Observer
  3. Memento
  4. State
queena
  1. Iterator
  2. Adapter
  1. Bridge
  2. Strategy
  3. Composite
  1. Flyweight
  2. Proxy
  3. Command
  4. Interpreter
這是上傳圖片要用的Hello程式連結

2004-10-10

Iterator範例圖 by shumi

List 1-1 Aggregate 介面
public interface Aggregate {
  public abstract Iterator iterator();
}
List 1-2 Iterator 介面
public interface Iterator {
  public abstract boolean hasNext();
  public abstract Object next();
}
List 1-3 Book 類別
public class Book {
  private String name ="";
  public Book(String name){
     this.name = name;
  }
  public String getName(){
     return name;
  }
}
List 1-4 BookShelf類別
public class BookShelf implements Aggregate{
  private Book[] books;
  private int last = 0;
  public BookShelf(int maxsize){
     this.books = new Book[maxsize];
  }
  public Book getBookAt(int index){
     return books[index];
  }
  public void appeandBook(Book book){
     this.books[last] = book;
     last++;
  }
  public int getLength(){
     return last;
  }
  public Iterator iterator(){
     return new BookShelfIterator(this);
  }
}
List 1-5 BookShelfIterator類別
public class BookShelfIterator implements Iterator{
  private BookShelf bookShelf;
  private int index;
  public BookShelfIterator(BookShelf bookShelf){
     this.bookShelf = bookShelf;
     this.index = 0;
  }
  public boolean hasNext(){
     if(index < bookShelf.getLength()){
         return true;
      }else{
         return false;
      }
   }
   public Object next(){

      Book book = bookShelf.getBookAt(index);
      index++;
      return book;
   }
}
List 1-6 Main類別
public class Mian {

  public static void main(String[] args) {
     BookShelf bookShelf = new BookShelf(4);
     bookShelf.appeandBook(new Book("Around the World"));
     bookShelf.appeandBook(new Book("Bible"));
     bookShelf.appeandBook(new Book("Cinderrella"));
     bookShelf.appeandBook(new Book("Daddy-Long-Legs"));
     Iterator it = bookShelf.iterator();
     while(it.hasNext()){
        Book book = (Book)it.next();
        System.out.println("" + book.getName());
     }
  }
}

2004-10-09

阿福的店


畢業旅行的時候去澎湖照的
沒想到老師在那裡有開一家店阿...

2004-10-08

FRIDAY Party 作業1

練習畫UML圖

這個程式是把書籍(Book)放到書架(BookShelf)上,並依序輸出書名。

List 1-1 Aggregate 介面
public interface Aggregate {
  public abstract Iterator iterator();
}
List 1-2 Iterator 介面
public interface Iterator {
  public abstract boolean hasNext();
  public abstract Object next();
}
List 1-3 Book 類別
public class Book {
  private String name ="";
  public Book(String name){
     this.name = name;
  }
  public String getName(){
     return name;
  }
}
List 1-4 BookShelf類別
public class BookShelf implements Aggregate{
  private Book[] books;
  private int last = 0;
  public BookShelf(int maxsize){
     this.books = new Book[maxsize];
  }
  public Book getBookAt(int index){
     return books[index];
  }
  public void appeandBook(Book book){
     this.books[last] = book;
     last++;
  }
  public int getLength(){
     return last;
  }
  public Iterator iterator(){
     return new BookShelfIterator(this);
  }
}
List 1-5 BookShelfIterator類別
public class BookShelfIterator implements Iterator{
  private BookShelf bookShelf;
  private int index;
  public BookShelfIterator(BookShelf bookShelf){
     this.bookShelf = bookShelf;
     this.index = 0;
  }
  public boolean hasNext(){
     if(index < bookShelf.getLength()){
         return true;
      }else{
         return false;
      }
   }
   public Object next(){
      Book book = bookShelf.getBookAt(index);
      index++;
      return book;
   }
}
List 1-6 Main類別
public class Mian {

  public static void main(String[] args) {
     BookShelf bookShelf = new BookShelf(4);
     bookShelf.appeandBook(new Book("Around the World"));
     bookShelf.appeandBook(new Book("Bible"));
     bookShelf.appeandBook(new Book("Cinderrella"));
     bookShelf.appeandBook(new Book("Daddy-Long-Legs"));
     Iterator it = bookShelf.iterator();
     while(it.hasNext()){
        Book book = (Book)it.next();
        System.out.println("" + book.getName());
     }
  }
}

--
加油囉~

2004-10-07

J2ME一些教學

自己整理的

點這裡!

喔賣Gay!!

我是94級 嚴聖筌

喔賣Gay! 喔賣Gay! 叫你賣Gay, 你哥Gay~~

2004-10-06

我來也~

報到
成員數資95級 李怡君
降大家就知道我是誰了~^^

超好用工具

下面是我目前推薦大家寫Java程式使用的工具
  1. Java IDE:Eclipse(3.0.1)
  2. UML Design Tool:Together Community Edition for Eclipse(6.3)
  3. GUI Builder:Jigloo SWT/Swing GUI Builder for Eclipse and WebSphere (3.0.1)

學會它們,你寫程式起來會很Happy
不會它們,你寫程式起來就不會那麼Happy
大家要瞭解這個重要性啊~

有關Eclipse的教學
可以看看我Blog裡面的內容
也可以看看JavaWorld@tw的相關討論喔~
大家加油吧~ :)

506研究室開Party囉~

Party in 506

這是506研究室的Blog
也是研究室成員討論、研究、聊天、打屁、八卦的所在

感覺上是很容易乾旱的地方...
所以希望大家多多分享自己的研究成果囉 :)

另外
我是數資94級的蕭宇程
請多指教~