java基礎學習——Swing圖形化用戶界面編程
阿新 • • 發佈:2018-05-11
tab serial case IE val ons span swing 數字
原文鏈接:https://blog.csdn.net/yiziweiyang/article/details/52317240
鏈接有詳細解釋,也有例子,以下是個人參照例子實驗的代碼。
package gui; import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; importjavax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextField; /** * swing實現計算器功能 * @author 喬成強 * @version 創建時間:2018年5月11日 下午5:43:35 */ public class GuiDemo extends JFrame implements ActionListener{ private static final long serialVersionUID = 2499964079704437558L;private JTextField result; // 顯示運算結果的文本框 private JButton[] buttons; // 所有的按鈕對象 private final String[] characters = { "7", "8", "9", "/", "4", "5", "6", "*", "1", "2", "3", "-", "0", ".", "=", "+" }; // 所有的按鈕文本 private boolean isFirstDigit = true; // 標記第一次輸入數字 private String operator = "="; //運算符 private double resultNum = 0.0; // 運算結果 public GuiDemo(String title) { //構造器 這裏記得修改為自己編寫的類 // 標題欄 super(title); // 大小 setSize(220, 200); // 居中 setLocationRelativeTo(null); // 默認關閉操作 setDefaultCloseOperation(EXIT_ON_CLOSE); // 禁止修改大小 setResizable(false); // 初始化文本框與按鈕 generateInterface(); // 顯示 setVisible(true); } public static void main(String [] args){ GuiDemo gd = new GuiDemo("計算器"); } /** * 初始化文本框與按鈕,生成界面 */ private void generateInterface() { /* 文本框 */ result = new JTextField("0"); // 右對齊 result.setHorizontalAlignment(JTextField.RIGHT); // 不允許編輯 result.setEditable(false); // 將文本框添加到窗體北方 add(result, BorderLayout.NORTH); /* 按鈕 */ buttons = new JButton[characters.length]; JPanel pnl = new JPanel(new GridLayout(4, 4, 5, 5)); for (int i = 0; i < buttons.length; i++) { buttons[i] = new JButton(characters[i]); buttons[i].addActionListener(this); buttons[i].setFocusable(false); // 不允許按鈕定位焦點 pnl.add(buttons[i]); } // 將所有按鈕添加到窗體的中間 add(pnl, BorderLayout.CENTER); // 允許內容面板定位焦點 this.getContentPane().setFocusable(true); // 註冊內容面板事件監聽器 // 使用適配器實現 this.getContentPane().addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { char ch = e.getKeyChar(); // 獲取按鈕字符 /* 處理數字或運算符 */ if (‘.‘ == ch || Character.isDigit(ch)) { // 數字小數點 handleNumber(String.valueOf(ch)); } else if ("+-*/=".indexOf(ch) != -1 || e.getKeyCode() == 10) { // 運算符 handleOperator(String.valueOf(ch)); } else if (e.getKeyCode() == 8) { // 退格鍵 String tmp = result.getText(); if (tmp.length() == 1) { result.setText("0"); isFirstDigit = true; } else { result.setText(tmp.substring(0, tmp.length() - 1)); } } } }); } @Override public void actionPerformed(ActionEvent e) { // 獲取點擊按鈕的文本 String text = e.getActionCommand(); /* 處理數字或運算符 */ if (".".equals(text) || Character.isDigit(text.charAt(0))) { // 數字小數點 handleNumber(text); } else if ("+-*/=".indexOf(text) != -1) { // 運算符 handleOperator(text); } } /** * 處理數字與小數點 * * @param text */ private void handleNumber(String text) { if (isFirstDigit) { // 第一次輸入 if (".".equals(text)) { this.result.setText("0."); } else { this.result.setText(text); } } else if ("0".equals(text) && "0".equals(this.result.getText())) { // 輸入0 isFirstDigit = true; return; } else if (".".equals(text) && this.result.getText().indexOf(".") == -1) { // 輸入小數點 this.result.setText(this.result.getText() + "."); } else if (!".".equals(text)) { // 輸入不為小數點 this.result.setText(this.result.getText() + text); } // 修改第一次輸入標記 isFirstDigit = false; } /** * 處理運算符 * * @param text */ private void handleOperator(String text) { /* 進行算術運算判斷 */ switch (operator) { case "+": resultNum += Double.parseDouble(this.result.getText()); break; case "-": resultNum -= Double.parseDouble(this.result.getText()); break; case "*": resultNum *= Double.parseDouble(this.result.getText()); break; case "/": resultNum /= Double.parseDouble(this.result.getText()); break; case "=": resultNum = Double.parseDouble(this.result.getText()); break; } // 將運算結果顯示到文本框中 this.result.setText(String.valueOf(resultNum)); // 將參數運算符放入成員變量中 this.operator = text; // 下一個數字是第一次輸入 isFirstDigit = true; } }
java基礎學習——Swing圖形化用戶界面編程