目前分類:Java學習筆記 (23)

瀏覽方式: 標題列表 簡短摘要

1. CustomJTabbedPaneUI之程式範例

public class CustomJTabbedPaneUI extends JTabbedPane {
    String[] imgPath = null;
    
    public CustomJTabbedPaneUI() {}
    
    public CustomJTabbedPaneUI(String[] imgPath) {
        this.imgPath = imgPath;
    }
    
    @Override 
    public void addTab(String title, final Component content) {
        JPanel tab = new JPanel(new BorderLayout());
        JLabel label = new JLabel(title);
        label.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 4));
        JButton button = new CloseButton(imgPath);
        button.setBorder(BorderFactory.createEmptyBorder());
        button.addActionListener(new ActionListener() {
            @Override public void actionPerformed(ActionEvent e) {
                removeTabAt(indexOfComponent(content));
            }
        });
        tab.add(label, BorderLayout.WEST);
        tab.add(button, BorderLayout.EAST);
        tab.setOpaque(false);
        tab.setBorder(BorderFactory.createEmptyBorder(2, 1, 1, 1));
        super.addTab(title, content);
        setTabComponentAt(getTabCount() - 1, tab);
    }
}

 

2. CloseButton之程式範例

文章標籤

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

1. CustomSplitPaneUI之部分程式範例

public class CustomSplitPaneUI extends BasicSplitPaneUI {
    private static Color BG_COLOR = Color.BLACK;
    private static Color BG_SHADOW_COLOR = Color.WHITE;
    private static Color ARROW_COLOR = Color.WHITE;
    private static Color ARROW_BLOCK_BG_COLOR = Color.BLACK;
    private static Color ARROW_BLOCK_BG_SHADOW_COLOR = Color.WHITE;
    private static int ONE_TOUCH_BUTTON_SIZE = -1;
    //private static final SearchSplitPaneUI cornerButtonUI = new SearchSplitPaneUI();
  
    public CustomSplitPaneUI() {
        super();
    }
  
    public static ComponentUI createUI(JComponent c) {
        return new CustomSplitPaneUI();
    }
    
    public void setDividerBackground(Color bgColor, Color bgShadowColor) {
        BG_COLOR = bgColor;
        BG_SHADOW_COLOR = bgShadowColor;
    }
    
    public void setArrowBtnBackground(Color bgColor) {
        ARROW_COLOR = bgColor;
    }
    
    public void setArrowBlockBackground(Color bgColor, Color bgShadowColor) {
        ARROW_BLOCK_BG_COLOR = bgColor;
        ARROW_BLOCK_BG_SHADOW_COLOR = bgShadowColor;
    }
    
    public void setOneTouchButtonSize(int size) {
        // 在此範例中,OneTouchButton size 只有4種:6-9
        if(size > 9)
            ONE_TOUCH_BUTTON_SIZE = 9;
        else if(size < 6)
            ONE_TOUCH_BUTTON_SIZE = 6;
        else
            ONE_TOUCH_BUTTON_SIZE = size;
    }

public func以讓使用者自行設定DividerArrow Button背景色與陰影色

文章標籤

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

1. 客製JSplitPanel之程式範例

        // 設定 splitPane Divider 與 leftButton、rightButton 之背景顏色
        splitPane.setUI(new BasicSplitPaneUI() {
            @Override
            public BasicSplitPaneDivider createDefaultDivider() {
                return new BasicSplitPaneDivider(this) {
                    @Override
                    public void paint(Graphics g) {
                        g.setColor(new Color(226,213,186));
                        g.fillRect(0, 0, getSize().width, getSize().height);
                        super.paint(g);
                    }
                };
            }
        });
        BasicSplitPaneDivider divider = (((BasicSplitPaneUI) splitPane.getUI()).getDivider());
        for (Component c: divider.getComponents()) {
            if (c instanceof JButton) {
                JButton b = (JButton) c;
                b.setBackground(new Color(226,213,186));
            }
        }
        divider.setBorder(BorderFactory.createLineBorder(new Color(102,51,0), 2));

 

2. 執行結果

執行結果01.png

▲生成時之樣貌

文章標籤

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

1. 客製JSplitPanel之程式範例

public class JSplitPanelDemo01 extends JPanel {
    JPanel panel01, panel02;
    JSplitPane splitPane;
    
    public JSplitPanelDemo01() {
        this.setLayout(new BorderLayout());

        UIManager.put("SplitPane.oneTouchButtonSize", 8);                        // 置頂 or 置底 按鈕 大小
        UIManager.put("SplitPane.oneTouchButtonOffset", 10);                     // 置頂 or 置底 按鈕 離左邊的距離
        UIManager.put("SplitPaneDivider.draggingColor", Color.PINK);             // 拖曳 Divider 時的顏色
        
        panel01 = new JPanel();
        panel02 = new JPanel();
        panel01.setPreferredSize(new Dimension(400, 200));
        panel01.add(new JButton("第一個按鈕"));
        panel01.setBackground(Color.RED);
        panel02.setPreferredSize(new Dimension(400, 140));
        panel02.setBackground(Color.GREEN);

        splitPane = new JSplitPane() {
            @Override public void updateUI() {
                super.updateUI();
                
                BasicSplitPaneDivider divider = ((BasicSplitPaneUI) getUI()).getDivider();
                /* 設置 Divider 邊框之顏色
                 * 同於 UIManager.put("SplitPaneDivider.border", BorderFactory.createLineBorder(Color.BLUE, 3));
                 *      divider.setBorder(BorderFactory.createMatteBorder(3, 3, 3, 3, Color.BLUE));
                 */
                divider.setBorder(BorderFactory.createLineBorder(Color.BLUE, 3));
                // 設置 Divider 背景顏色
                divider.setBackground(Color.ORANGE);
            }
        };
        // 設置 上下放置 之 內容
        splitPane.setLeftComponent(panel01);
        splitPane.setRightComponent(panel02);
        // 顯示置頂 or 置底 按鈕,同於 UIManager.put("SplitPane.centerOneTouchButtons", true);
        splitPane.setOneTouchExpandable(true);
        // 設置 分割之方向 (JSplitPane.VERTICAL_SPLIT / JSplitPane.HORIZONTAL_SPLIT)
        splitPane.setOrientation(JSplitPane.VERTICAL_SPLIT);
        // 設置 Divider 之 寬度
        splitPane.setDividerSize(20);

        // 設置 置頂 or 置底 按鈕 背景顏色
        BasicSplitPaneDivider divider = ((BasicSplitPaneUI) splitPane.getUI()).getDivider();
        divider.setBackground(Color.ORANGE);
        for (Component c: divider.getComponents()) {
            if (c instanceof JButton) {
                JButton b = (JButton) c;
                b.setBackground(Color.ORANGE);
            }
        }

        this.add(splitPane);
        this.setPreferredSize(new Dimension(400, 240));
    }

 

2. 主執行之程式範例

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

在此範例中,主要用於「判斷字串中,是否包含大小寫英文字母、數字、特殊符號,並且至少各有一個英文字母及數字在其中,而總長度最少為8()以上」,而如有其他需求的話,也能依需求增刪減程式碼。

 

1. 主程式範例

/**
 * 判斷字串中,是否包含大小寫英文字母、數字、特殊符號,並且至少各有一個英文字母及數字在其中,而總長度最少為8碼(含)以上
 * @author Elsa
 */
public class PasswordDecideDemo {
    public static void main(String... args) {
        System.out.println("1: " + isMeetPwdRule("a"));
        System.out.println("2: " + isMeetPwdRule("2"));
        System.out.println("3: " + isMeetPwdRule("a3b"));
        System.out.println("4: " + isMeetPwdRule("abcdefg"));
        System.out.println("5: " + isMeetPwdRule("951348206899"));
        System.out.println("6: " + isMeetPwdRule("a@ab5byuf"));
        System.out.println("7: " + isMeetPwdRule("bdg69wtyu"));
    }

 

2. 判斷字串之方法範例

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

1. 設置Table Model –MsgTableModel之程式

import java.util.ArrayList;
import java.util.List;

import javax.swing.table.AbstractTableModel;

/**
 * <code>MsgTableModel</code> 
 * 
 * @author Elsa
 */
public class MsgTableModel extends AbstractTableModel {
    private List<Object> listData;

    public MsgTableModel() {
        listData = new ArrayList<Object>();
    }
    
    public void addRow(Object msgComponent) {
        listData.add(msgComponent);
        int listLen = listData.size();
        this.fireTableRowsInserted(listLen - 1, listLen - 1);
    }

    @Override
    public int getRowCount() {
        return listData.size();
    }

    @Override
    public int getColumnCount() {
        return 1;
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        return listData.get(rowIndex);
    }
    
    @Override 
    public boolean isCellEditable(int row, int col) {
       return false;
    }
}

 

2. 設置客製化之訊息樣版與程式

MsgListPanel_樣版.png

public class MsgListPanel extends javax.swing.JPanel {

   /**
    * Creates new form MsgListPanel
    */
    public MsgListPanel(String account, String msg, String time) {
        initComponents();        

        labAcount.setText(account);
        labMsg.setText(msg);
        labTime.setText(time);
        if(account.length() == 0) {
            labMsg.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
            labMsg.setForeground(new Color(41, 148, 255));
            labImg.setVisible(false);
        }
    }

 

3. 設置MsgListComponent以取得各個訊息相關資訊之程式

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

1. 話嘴向左之泡泡對話框程式範例

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Polygon;
import java.awt.RenderingHints;
import java.awt.geom.Area;
import java.awt.geom.RoundRectangle2D;

import javax.swing.JPanel;

/**
 *
 * @author Elsa
 */
public class LeftArrowBubble extends JPanel {
    private int strokeThickness = 5;
    private int padding = strokeThickness / 2;
    private int arrowSize = 6;
    private int radius = 10;
    private Color bubblecolor;
    
    public LeftArrowBubble() {
        bubblecolor = new Color(255, 199, 143);
    }

    public void setBubbleColor(Color color) {
        this.bubblecolor = color;
    }
    
    public Color getBubbleColor() {
        return bubblecolor;
    }
    
    @Override
    protected void paintComponent(final Graphics g) {
        final Graphics2D graphics2D = (Graphics2D) g;
        // 1.設置圖形之外框線條為具平滑線條(非鋸齒狀)
        RenderingHints qualityHints = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        qualityHints.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
        graphics2D.setRenderingHints(qualityHints);
        // 2.設置圖形之背景顏色與線條粗組
        graphics2D.setColor(getBubbleColor());
        graphics2D.setStroke(new BasicStroke(strokeThickness));
        
        // 3.繪製具圓角之方框範圍
        int x = padding + strokeThickness + arrowSize;
        int width = getWidth() - arrowSize - (strokeThickness * 2);
        int height = getHeight() - strokeThickness;
        graphics2D.fillRect(x, padding, width, height);
        RoundRectangle2D.Double rect = new RoundRectangle2D.Double(x, padding, width, height, radius, radius);
        // 4.繪製對話之話嘴的部分
        Polygon arrow = new Polygon();
        arrow.addPoint(14, 6);
        arrow.addPoint(arrowSize + 2, 10);
        arrow.addPoint(14, 12);
        // 5.將二個圖形加入 area中,並利用 draw() 方法畫出指定的圖形
        Area area = new Area(rect);
        area.add(new Area(arrow));
        graphics2D.draw(area);
    }
}

 

2. 話嘴向右之泡泡對話框程式範例

文章標籤

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

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) 人氣()

1. showMessageDialog參數說明

JOptionPane.showMessageDialog(Component parent, Object message, String title, int messageType , Icon icon);

參數說明:

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

Object message:放置要顯示的訊息

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

int messageType:設定要顯示的訊息類型,如無設置,其預設為INFORMATION(即圖示為 i)

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

 

2. showMessageDialog範例

文章標籤

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

1. JOptionPane彈跳視窗之類型

    (1) showMessageDialog(訊息框):用於顯示訊息,例如檔案不存在、帳號密碼錯誤等,其只有一個確認按鈕,以關閉該訊息框。

    (2) showConfirmDialog(確認框):用於確認問題,例如刪除檔案、關閉視窗等,其最少有Yes/No二個按鈕,不過也可顯示三個按鈕Yes/No/Cancel

    (3) showInputDialog(輸入框):用於提供使用者輸入所需的資訊,例如帳號密碼、搜尋關鍵字等,因此其最少具有一個TextField(文字方塊)/ComboBox(下拉式選單)OK按鈕,或多加Cancel按鈕。

    (4) showOptionDialog(選項框):顯示選項並用以確認資訊,其為確認框的變形,只是多了兩個參數,且只有一個方法,並無多載。另外,其可透過傳入陣列之內容,以自訂選項按鈕上的文字,而非只有Yes/No/Cancel/OK

 

2. Option Type彈跳視窗之選項按鈕類型

    (1) JOptionPane.DEFAULT_OPTION (= -1)

    (2) JOptionPane.YES_NO_OPTION (=0)

    (3) JOptionPane.YES_NO_CANCEL_OPTION (=1)

    (4) JOptionPane.OK_CANCEL_OPTION (=2)

 

3. Message Type彈跳視窗之訊息類型(其為顯示在左側的圖示)

    (1) JOptionPane.ERROR_MESSAGE (=0)X

文章標籤

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

本範例應用在須將系統常駐,但總不能將其縮小在工作列上之情況,所以利用SystemTrayTrayIconPopupMenuMenuItemMenu...等元件,以及各種監聽事件(ActionListenerItemListenerWindowListener),以完成視窗縮小至系統托盤上之效果,並給予範例以供各位學習。

 

系統托盤預設位於工作列的右方、螢幕的右下角。一般的程式在按下視窗縮小鍵之後,會縮小並以圖像形式出現於工作列上。但有些程式卻將圖像縮放於系統托盤內,有如常駐程式般,方便使用者點選使用,如下圖。

WindowIconifiedDemo_5.png

 

  1. 縮小JFrame時縮小至系統托盤上之程式範例

WindowClosingDemo_1.png

文章標籤

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

1 2