關於Swing的小嚐試
阿新 • • 發佈:2019-01-09
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); } }