1. 程式人生 > >關於Swing的小嚐試

關於Swing的小嚐試

package cn.breeziness.matlab;

import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.regex.Pattern;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

public class SwingUi extends JFrame {

	public TextViewCallBack tvCallBack; // 宣告文字框回撥介面型別

	private JTextField jt1 = null; // 宣告文字框型別
	private JTextField jt2 = null;

	// 構造方法
	public SwingUi() {

	}

	/**
	 * 初始化窗體方法,使用Swing工具包 這裡對文字框和按鍵監聽 按鍵點選後,在按鍵處理介面方法中,將文字框資料通過文本回調介面回撥給呼叫者
	 * 文字輸入資訊取樣正則匹配正整數
	 * 
	 */
	public void drawWindows() {

		//窗體設定
		setTitle("計算點電荷電場分佈");
		setLayout(null);
		setBounds(0, 0, 500, 350);
		Container container = getContentPane();//窗體物件

		//文字便籤設定
		JLabel jl1 = new JLabel("電荷1電量:");
		JLabel jl2 = new JLabel("電荷2電量:");
		JLabel jl3 = new JLabel("breeziness");
		jl1.setFont(new Font("宋體", Font.BOLD, 18));
		jl2.setFont(new Font("宋體", Font.BOLD, 18));
		jl3.setFont(new Font("微軟雅黑", Font.BOLD + Font.ITALIC, 14));
		jl1.setBounds(60, 70, 200, 20);
		jl2.setBounds(60, 140, 200, 20);
		jl3.setBounds(320, 280, 200, 20);

		//文字框控制元件設定
		jt1 = new JTextField();
		jt2 = new JTextField();
		jt1.setBounds(160, 65, 200, 35); // x,y,width.heigth
		jt2.setBounds(160, 135, 200, 35); // x,y,width.heigth

		//按鍵設定
		JButton jb = new JButton("繪製電場分佈");
		jb.setBounds(190, 210, 120, 25);
		//按鍵監聽事件
		jb.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				// 獲取文字框內容,為字串格式
				String x = jt1.getText();
				String y = jt2.getText();
				if ((isNumber(x) && isNumber(y)) == false) {
					// 提出對話方塊提示格式錯誤
					JOptionPane.showMessageDialog(null, "格式錯誤,請輸入正整數");
					// 錯誤的項自動清空
					if (isNumber(x) == false) {
						jt1.setText("");
						jt1.requestFocus();
					}
					if (isNumber(y) == false) {
						jt2.setText("");
						jt2.requestFocus();
					}
				} else {
					// 彈出對話方塊,提示
					JOptionPane.showMessageDialog(null, "繪圖需要等待幾秒");
					// 將文字框資料裝入介面中,提供回撥
					tvCallBack.getTextView(x, y);
				}

			}
		});

		// 裝載控制元件到窗體中
		container.add(jl1);
		container.add(jl2);
		container.add(jl3);
		container.add(jt1);
		container.add(jt2);
		container.add(jb);
		container.setBackground(Color.PINK);// 設定窗體背景顏色
		setVisible(true);// 設定窗體視覺化

	}

	/**
	 * 正則匹配使用者輸入的資料
	 * 
	 * @param str
	 * @return
	 */
	public static boolean isNumber(String str) {
		// 採用正則表示式的方式來判斷一個字串是否為數字
		boolean isInt = Pattern.compile("^[0-9]*[1-9][0-9]*$").matcher(str).find();
		// 結果不是正整數就返回false
		return isInt;

	}

	/**
	 * 文字框內容回撥介面
	 * 
	 * @author breeziness
	 *
	 */
	public interface TextViewCallBack {
		public abstract void getTextView(String x, String y);
	}

}