2013年6月30日 星期日

Jsoup Java 網路爬蟲套件

使用Jsoup 來分析HTML頁面

使用範例:

import java.net.URL;
import java.util.Iterator;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class JsoupCrawlerUT {

public static void main(String[] args)  throws Exception{

//URL 以yahoo股票為測試
        URL url = new URL("http://tw.stock.yahoo.com/q/q?s=2002");
        
        /*
         * 向網頁伺服發出請求,並將回應分析成document。
         * 第一個參數是:請求位置與QueryString。
         * 第二個參數是:連線時間(毫秒),在指定時間內若無回應則會丟出IOException
         */       
        Document doc = Jsoup.parse(url, 3000);
        
        //取回所center下所有的table
        Elements tables = doc.select("center>table");
        
        Iterator iterator;
        
        //print all table 
        /*
        for(Element table : tables)
        {
            //get td Iterator
        iterator = table.select("td").iterator();           
           
            while(iterator.hasNext())
            {               
                System.out.println("data" + ": " + iterator.next().text().trim());
            }        
        } 
        */        
        System.out.println("--------------------------------------------------");        
        Element  table;
        
     //取標頭
        table = tables.get(1).select("table").get(0);        
        iterator = table.select("th").iterator();       
        while(iterator.hasNext())
        {               
            System.out.println("data" + ": " + iterator.next().text().trim());
        } 
        
        System.out.println("--------------------------------------------------");  
        
        //取內容        
        //取索引1的table
        table = tables.get(1).select("table").get(1);
        
        //get td Iterator
     iterator = table.select("td").iterator();       
        while(iterator.hasNext())
        {               
            System.out.println("data" + ": " + iterator.next().text().trim());
        }         
  }
}


輸出:

2013年6月26日 星期三

關於Java JFrame 常用功能


JFrame就是Java桌面的應用程序視窗。

※設定關閉JFrame後的動作:

  • setDefaultCloseOperation(EXIT_ON_CLOSE);
  • 會呼叫系統的Exit method,如此才會釋放OS的記憶體。

是否能夠讓使用者改變視窗大小:

  • setResizable(false);
  • false將不可以改變大小,true可以。


設定JFrame的ICON:
  • setIconImage(new ImageIcon("your image path").getImage());
  • 路徑範例: "images\\frame_icon.png"

設定寬高:
  • setSize(500, 400);

設定視窗顯現:
  • setVisible(true);

※焦點設定到JFrame上
  • setFocusable(true);

※取消組件的Focus效用
  • setFocusable(false);

btn.setFocusPainted(false);


※注意若要使用JFrame的KeyListener事件,那麼Focus一定要在JFrame上才有作用。

※其他組件必須取消或得Focus或是當其他組件事件發生完畢,必須將Focus設定回JFrame。






Java 計算String在畫面上的Width

案例:想知道字串在畫面上的width是否會超出Label的Width。

使用:
  1. 使用Componet中的 FontMetrics getFontMetrics(Font font) 方法取回FontMetrics。
  2. 使用FontMetrics中的int stringWidth(String str) 取回字串寬度。

Componet的名稱空間:

 java.lang.Object
    extended by java.awt.Component

FontMetrics的名稱空間:


範例: