1. 圓形頭像之程式範例

import java.awt.AlphaComposite;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;

/**
 *
 * @author Elsa
 */
public class RoundImageIconObject {
    
    public static ImageIcon getRoundImageIcon(String url) {
        try {
            BufferedImage master = ImageIO.read(RoundImageIconObject.class.getResource(url));
            int diameter = Math.min(master.getWidth(), master.getHeight());
            BufferedImage mask = new BufferedImage(master.getWidth(), master.getHeight(), BufferedImage.TYPE_INT_ARGB);

            Graphics2D g2d = mask.createGraphics();
            applyQualityRenderingHints(g2d);
            g2d.fillOval(0, 0, diameter - 1, diameter - 1);
            g2d.dispose();

            BufferedImage masked = new BufferedImage(diameter, diameter, BufferedImage.TYPE_INT_ARGB);
            g2d = masked.createGraphics();
            applyQualityRenderingHints(g2d);
            int x = (diameter - master.getWidth()) / 2;
            int y = (diameter - master.getHeight()) / 2;
            g2d.drawImage(master, x, y, null);
            g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.DST_IN));
            g2d.drawImage(mask, 0, 0, null);
            g2d.dispose();
            
            return new ImageIcon(masked);
            
        } catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }
    
    private static void applyQualityRenderingHints(Graphics2D g2d) {
        g2d.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g2d.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY);
        g2d.setRenderingHint(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_ENABLE);
        g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
        g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
        g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
        g2d.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE);
    }
}

 

2. 主執行之程式範例

文章標籤

Elsa 發表在 痞客邦 留言(0) 人氣()

1. 監聽視窗大小變化

JFrame裡設置addWindowStateListener() 方法,可監聽視窗大小變化之事件,並依需求撰寫所需之程式。

 

◎程式範例:

importjava.awt.event.WindowEvent;

importjava.awt.event.WindowStateListener;

 

<……>

 

this.addWindowStateListener(newWindowStateListener () {

public voidwindowStateChanged(WindowEvent state) {

if(state.getNewState() == 1 || state.getNewState() == 7) {

System.out.println("視窗最小化");

} else if(state.getNewState() == 0) {

System.out.println("視窗恢復到原本的視窗大小");

} else if(state.getNewState() == 6) {

System.out.println("視窗最大化");

}

}

});

 

2. BorderLayout版面重覆疊放之衍伸問題

文章標籤

Elsa 發表在 痞客邦 留言(0) 人氣()

JWindow是一個能夠在使用者桌面的任何地方顯示的容器,所以能夠使用它來建構提示訊息,如下圖所示。

PopupMessageDemo_1.png

 

1. 於桌面上任意地方彈出(右下)提示訊息之程式範例

◎主程式(呼叫PopupMessageModel)

public class PopupMessageDemo {
    public static void main(String[] args) {
        String[][] message = {{"1~ElsaElsaElsaElsa~1", "99最新訊息最新訊息最新訊息最新訊息最新訊息最新訊息最新訊息最新訊息99"},
                              {"2*ElsaElsaElsaElsaElsaElsaElsa*2", "6最新訊息最新訊息9"}};
        new PopupMessageModel(message);
    }
}

 

PopupMessageModel之建構子,並設定提示訊息顯示之位置與時間

其分為三種:

              a. 顯示於桌面之正中央

new PopupMessageBuilder().withDelay(4000).withMessage(message).show();

              b. 顯示於使用者指定之位置

new PopupMessageBuilder().at(new Point(10, 10)).withDelay(4000).withMessage(message).show();

               c. 顯示在右下角

new PopupMessageBuilder().isBottomRight(true).withDelay(4000).withMessage(message).show();

        或

newPopupMessageBuilder().at(new Point(10, 10)).isBottomRight(true).withDelay(4000).withMessage(message).show();

import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Insets;
import java.awt.LinearGradientPaint;
import java.awt.Point;
import java.awt.RenderingHints;
import java.awt.Toolkit;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.RoundRectangle2D;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JWindow;
import javax.swing.Timer;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.EmptyBorder;

/**
 *
 * @author Elsa
 */
public class PopupMessageModel {

    public PopupMessageModel(String[][] message) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    // setLookAndFeel()用於設置圖形介面的外觀,而在此可透過UIManager的getStstemLookAndFeelClassName回傳系統平台的String,例如:com.sun.java.swing.plaf.windows.WindowsLookAndFeel
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }
                new PopupMessageBuilder().isBottomRight(true).withDelay(4000).withMessage(message).show();
            }
        });
    }

 

◎建置提示訊息之初始化元件、方法(PopupMessageBuilder)

Elsa 發表在 痞客邦 留言(0) 人氣()

本次採用的方法為Override JPanelpaintComponent()方法,即重新繪製Panel,以達到我們所想要的效果。不過,該圖因為固定大小,因此進行縮放時,只會將該圖延展,並不會重複拼貼,所以圖形會有變形之情況發生。另外,在此簡單的介紹paintComponent()之使用方法,並給予範例以供各位參考與學習。

 

1. 三個繪製元件時之重要方法介紹

    Swing中,元件繪製時會執行paint()方法,而讓方法中又包含了三個函式,其會依次調用paintComponent()àpaintBorder()àpaintChildren()這三個方法,以確保子元件能正確地顯示在該元件上。此三個方法分別代表:

a.protected void paintComponent( Graphics g )繪製元件自身的外觀,以及

b.protected void paintBorder( Graphics g )繪製元件的邊框

c.protected void paintChildren( Graphics g )繪製其元件內的所有子元件

 

2. paintComponent()JFrame中加入背景圖之關係說明

文章標籤

Elsa 發表在 痞客邦 留言(0) 人氣()

JFrame中加入背景圖常見的作法為,利用JLabelJPanel等二個元件,塞至Frame之最下層,以作為Frame之背景圖。不過該範例,只適合固定視窗之情況,因其不能隨著縮放大小視窗而自行變動及延展圖片。

 

1. 範例:在此展示一個具有背景圖之視窗,但並不會根據使用者拉大/縮小視窗而有所變動。

文章標籤

Elsa 發表在 痞客邦 留言(0) 人氣()

預設之進度條或圈可能無法滿足各種版型,因此本次採用輪播圖片的方式,再加上實作Runnable介面以實現多線程(/執行緒)來不斷地執行該動畫,以達到進度圈之樣貌,並在此給予範例以供各位參考與學習。

 

1. RunnableThread的區別

2. Java中有二種方式可實現多線程,一為繼承Thread類別,另一則為實作Runnable介面。

        a.  繼承Thread類別

       Class只要extendsThread,並覆寫run()方法,即可實現多線程之操作,但因一個Class只能繼承一個父類別,因此大多是透過實作Runnable介面來完成的。

        b. 實作Runnable介面

       (1) 一個Class只要implementsRunnable,且覆寫run()方法,即可實現多線程之操作,但因Runnable定義的子類別中没有start()方法,因此利用public Thread(Runnable target)建構子,來接受Runnable的子類實例,並再透過Thread來啟動之。

                (2) Ex

CustomThreadct = new CustomThread(“自製線程內容”);

Thread thread = new Thread(ct);

thread.start();

          c. 差異之間的小結

        多線程大多皆以「實作Runnable介面」為主,因為其好處在於:避免侷限於只能繼承一個父類別之問題,其能一個類別實作好幾個介面。

 

  1. 範例:在此展示一個共有8張相似之圖示,並於每180毫秒就會重新變更該圖片之範例,其主要為達到下載中的進度圈之效果。
文章標籤

Elsa 發表在 痞客邦 留言(0) 人氣()

由於JDK 1.6版以後可利用NetworkInterface類別獲取網卡的一些資訊。因此,在這裡我們將用簡單的程式碼來獲得本機的IPMAC地址。

 

1. MacAddress.java

MacAddress程式碼.png

 

2. 執行結果

執行結果_new.png

 

3. 重點說明

文章標籤

Elsa 發表在 痞客邦 留言(0) 人氣()

  1. showOptionDialog參數說明

JOptionPane.showOptionDialog(Component parent, Object message, String title,intoptionType, intmessageType, Icon icon, Object[] options, Object initialValue)

參數說明:

Component parent:父容器元件,例如JFrameJAppletJDialog

Object message:放置要顯示的訊息

String title:放置要顯示的訊息標題

intoptionType:設定要顯示的選項類型

intmessageType:設定要顯示的訊息類型

Icon icon:若傳入一個IconImageIcon物件,則可以自訂圖示

Object[]options:此參數用於按鈕之文字

Object initialValue:此參數用於設定預設之按鈕

 

  2. showOptionDialog範例

文章標籤

Elsa 發表在 痞客邦 留言(0) 人氣()

  1. showInputDialog參數說明

JOptionPane.showInputDialog(Component parent, Object message, String title, intmessageType, Icon icon , Object[] selection, Object initialSelectionValue);

參數說明:

Component parent:父容器元件,例如JFrameJAppletJDialog

Object message:放置要顯示的訊息

String title:放置要顯示的訊息標題,如無設置,其預設為[輸入]

intmessageType:設定要顯示的訊息類型,如無設置,其預設為QUESTION(即圖示為 ?)

Icon icon:若傳入一個IconImageIcon物件,則可以自訂圖示

Object[] selection:此參數用於下拉式選單之清單

Object initialSelectionValue:此參數用於下拉式選單之預設選項

 

  2. showInputDialog範例

文章標籤

Elsa 發表在 痞客邦 留言(0) 人氣()

  1. showConfirmDialog參數說明

JOptionPane.showConfirmDialog(Component parent, Object message, String title, intoptionType, intmessageType, Icon icon);

參數說明:

Component parent:父容器元件,例如JFrameJAppletJDialog

Object message:放置要顯示的訊息

String title:放置要顯示的訊息標題,如無設置,其預設為[選取一個選項]

intoptionType:設定要顯示的選項類型,如無設置,其預設為YES_NO_CANCEL_OPTION

intmessageType:設定要顯示的訊息類型,如無設置,其預設為QUESTION(即圖示為 ?)

Icon icon:若傳入一個IconImageIcon物件,則可以自訂圖示

 

  2. showConfirmDialog範例

文章標籤

Elsa 發表在 痞客邦 留言(0) 人氣()