溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java圖形界面之怎么實現加法計算器

發布時間:2022-04-26 10:03:54 來源:億速云 閱讀:170 作者:iii 欄目:開發技術

Java圖形界面之怎么實現加法計算器

引言

在Java編程中,圖形用戶界面(GUI)是開發桌面應用程序的重要組成部分。通過GUI,用戶可以直觀地與程序進行交互,而無需通過命令行輸入。本文將詳細介紹如何使用Java的Swing庫來實現一個簡單的加法計算器。我們將從基本概念開始,逐步構建一個功能完整的加法計算器。

1. Java GUI編程基礎

1.1 Swing簡介

Swing是Java提供的一個用于創建圖形用戶界面的庫。它是Java Foundation Classes(JFC)的一部分,提供了豐富的組件和工具,用于構建跨平臺的桌面應用程序。Swing組件是輕量級的,不依賴于操作系統的原生窗口系統,因此可以在不同的平臺上保持一致的界面風格。

1.2 常用Swing組件

在實現加法計算器時,我們將使用以下Swing組件:

  • JFrame:用于創建主窗口。
  • JPanel:用于組織和管理其他組件。
  • JLabel:用于顯示文本或圖像。
  • JTextField:用于接收用戶輸入的文本。
  • JButton:用于觸發事件,如點擊按鈕執行加法操作。

2. 創建加法計算器的步驟

2.1 創建主窗口

首先,我們需要創建一個主窗口來容納所有的GUI組件。我們可以通過繼承JFrame類來實現這一點。

import javax.swing.*;

public class Calculator extends JFrame {
    public Calculator() {
        setTitle("加法計算器");
        setSize(300, 200);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null); // 居中顯示
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            Calculator calculator = new Calculator();
            calculator.setVisible(true);
        });
    }
}

在上面的代碼中,我們創建了一個Calculator類,繼承自JFrame。在構造函數中,我們設置了窗口的標題、大小、關閉操作以及窗口居中顯示。main方法中使用SwingUtilities.invokeLater來確保GUI的創建和更新在事件調度線程中進行。

2.2 添加輸入框和按鈕

接下來,我們需要在窗口中添加兩個輸入框用于輸入數字,一個按鈕用于觸發加法操作,以及一個標簽用于顯示結果。

import javax.swing.*;
import java.awt.*;

public class Calculator extends JFrame {
    private JTextField num1Field;
    private JTextField num2Field;
    private JLabel resultLabel;

    public Calculator() {
        setTitle("加法計算器");
        setSize(300, 200);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null); // 居中顯示

        // 創建面板
        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(4, 2));

        // 添加組件
        panel.add(new JLabel("數字1:"));
        num1Field = new JTextField();
        panel.add(num1Field);

        panel.add(new JLabel("數字2:"));
        num2Field = new JTextField();
        panel.add(num2Field);

        JButton addButton = new JButton("計算");
        panel.add(addButton);

        resultLabel = new JLabel("結果:");
        panel.add(resultLabel);

        // 添加面板到窗口
        add(panel);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            Calculator calculator = new Calculator();
            calculator.setVisible(true);
        });
    }
}

在上面的代碼中,我們創建了一個JPanel面板,并使用GridLayout布局管理器將組件排列成4行2列的網格。我們添加了兩個JTextField用于輸入數字,一個JButton用于觸發加法操作,以及一個JLabel用于顯示結果。

2.3 實現加法邏輯

現在,我們需要為“計算”按鈕添加事件監聽器,以便在用戶點擊按鈕時執行加法操作并顯示結果。

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Calculator extends JFrame {
    private JTextField num1Field;
    private JTextField num2Field;
    private JLabel resultLabel;

    public Calculator() {
        setTitle("加法計算器");
        setSize(300, 200);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null); // 居中顯示

        // 創建面板
        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(4, 2));

        // 添加組件
        panel.add(new JLabel("數字1:"));
        num1Field = new JTextField();
        panel.add(num1Field);

        panel.add(new JLabel("數字2:"));
        num2Field = new JTextField();
        panel.add(num2Field);

        JButton addButton = new JButton("計算");
        panel.add(addButton);

        resultLabel = new JLabel("結果:");
        panel.add(resultLabel);

        // 添加事件監聽器
        addButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                try {
                    double num1 = Double.parseDouble(num1Field.getText());
                    double num2 = Double.parseDouble(num2Field.getText());
                    double result = num1 + num2;
                    resultLabel.setText("結果: " + result);
                } catch (NumberFormatException ex) {
                    resultLabel.setText("結果: 輸入無效");
                }
            }
        });

        // 添加面板到窗口
        add(panel);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            Calculator calculator = new Calculator();
            calculator.setVisible(true);
        });
    }
}

在上面的代碼中,我們為“計算”按鈕添加了一個ActionListener,當用戶點擊按鈕時,程序會讀取兩個輸入框中的文本,將其轉換為double類型,執行加法操作,并將結果顯示在resultLabel中。如果輸入無效(例如輸入了非數字字符),程序會捕獲NumberFormatException并顯示錯誤信息。

2.4 優化用戶體驗

為了進一步提升用戶體驗,我們可以添加一些額外的功能,例如:

  • 輸入驗證:在用戶輸入時實時驗證輸入內容是否為數字。
  • 清空按鈕:添加一個按鈕用于清空輸入框和結果。
  • 鍵盤快捷鍵:允許用戶通過鍵盤快捷鍵執行加法操作。

2.4.1 輸入驗證

我們可以為輸入框添加DocumentListener,在用戶輸入時實時驗證輸入內容是否為數字。

import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Calculator extends JFrame {
    private JTextField num1Field;
    private JTextField num2Field;
    private JLabel resultLabel;

    public Calculator() {
        setTitle("加法計算器");
        setSize(300, 200);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null); // 居中顯示

        // 創建面板
        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(4, 2));

        // 添加組件
        panel.add(new JLabel("數字1:"));
        num1Field = new JTextField();
        panel.add(num1Field);

        panel.add(new JLabel("數字2:"));
        num2Field = new JTextField();
        panel.add(num2Field);

        JButton addButton = new JButton("計算");
        panel.add(addButton);

        resultLabel = new JLabel("結果:");
        panel.add(resultLabel);

        // 添加事件監聽器
        addButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                try {
                    double num1 = Double.parseDouble(num1Field.getText());
                    double num2 = Double.parseDouble(num2Field.getText());
                    double result = num1 + num2;
                    resultLabel.setText("結果: " + result);
                } catch (NumberFormatException ex) {
                    resultLabel.setText("結果: 輸入無效");
                }
            }
        });

        // 添加輸入驗證
        DocumentListener documentListener = new DocumentListener() {
            @Override
            public void insertUpdate(DocumentEvent e) {
                validateInput();
            }

            @Override
            public void removeUpdate(DocumentEvent e) {
                validateInput();
            }

            @Override
            public void changedUpdate(DocumentEvent e) {
                validateInput();
            }

            private void validateInput() {
                try {
                    Double.parseDouble(num1Field.getText());
                    Double.parseDouble(num2Field.getText());
                    addButton.setEnabled(true);
                } catch (NumberFormatException ex) {
                    addButton.setEnabled(false);
                }
            }
        };

        num1Field.getDocument().addDocumentListener(documentListener);
        num2Field.getDocument().addDocumentListener(documentListener);

        // 添加面板到窗口
        add(panel);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            Calculator calculator = new Calculator();
            calculator.setVisible(true);
        });
    }
}

在上面的代碼中,我們為輸入框添加了DocumentListener,當用戶輸入內容時,程序會實時驗證輸入是否為數字。如果輸入無效,計算按鈕將被禁用。

2.4.2 清空按鈕

我們可以添加一個“清空”按鈕,用于清空輸入框和結果。

import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Calculator extends JFrame {
    private JTextField num1Field;
    private JTextField num2Field;
    private JLabel resultLabel;

    public Calculator() {
        setTitle("加法計算器");
        setSize(300, 200);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null); // 居中顯示

        // 創建面板
        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(5, 2));

        // 添加組件
        panel.add(new JLabel("數字1:"));
        num1Field = new JTextField();
        panel.add(num1Field);

        panel.add(new JLabel("數字2:"));
        num2Field = new JTextField();
        panel.add(num2Field);

        JButton addButton = new JButton("計算");
        panel.add(addButton);

        JButton clearButton = new JButton("清空");
        panel.add(clearButton);

        resultLabel = new JLabel("結果:");
        panel.add(resultLabel);

        // 添加事件監聽器
        addButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                try {
                    double num1 = Double.parseDouble(num1Field.getText());
                    double num2 = Double.parseDouble(num2Field.getText());
                    double result = num1 + num2;
                    resultLabel.setText("結果: " + result);
                } catch (NumberFormatException ex) {
                    resultLabel.setText("結果: 輸入無效");
                }
            }
        });

        clearButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                num1Field.setText("");
                num2Field.setText("");
                resultLabel.setText("結果:");
            }
        });

        // 添加輸入驗證
        DocumentListener documentListener = new DocumentListener() {
            @Override
            public void insertUpdate(DocumentEvent e) {
                validateInput();
            }

            @Override
            public void removeUpdate(DocumentEvent e) {
                validateInput();
            }

            @Override
            public void changedUpdate(DocumentEvent e) {
                validateInput();
            }

            private void validateInput() {
                try {
                    Double.parseDouble(num1Field.getText());
                    Double.parseDouble(num2Field.getText());
                    addButton.setEnabled(true);
                } catch (NumberFormatException ex) {
                    addButton.setEnabled(false);
                }
            }
        };

        num1Field.getDocument().addDocumentListener(documentListener);
        num2Field.getDocument().addDocumentListener(documentListener);

        // 添加面板到窗口
        add(panel);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            Calculator calculator = new Calculator();
            calculator.setVisible(true);
        });
    }
}

在上面的代碼中,我們添加了一個“清空”按鈕,并為其添加了ActionListener。當用戶點擊“清空”按鈕時,輸入框和結果將被清空。

2.4.3 鍵盤快捷鍵

我們可以為“計算”按鈕添加快捷鍵,例如按下Enter鍵時執行加法操作。

import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;

public class Calculator extends JFrame {
    private JTextField num1Field;
    private JTextField num2Field;
    private JLabel resultLabel;

    public Calculator() {
        setTitle("加法計算器");
        setSize(300, 200);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null); // 居中顯示

        // 創建面板
        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(5, 2));

        // 添加組件
        panel.add(new JLabel("數字1:"));
        num1Field = new JTextField();
        panel.add(num1Field);

        panel.add(new JLabel("數字2:"));
        num2Field = new JTextField();
        panel.add(num2Field);

        JButton addButton = new JButton("計算");
        panel.add(addButton);

        JButton clearButton = new JButton("清空");
        panel.add(clearButton);

        resultLabel = new JLabel("結果:");
        panel.add(resultLabel);

        // 添加事件監聽器
        ActionListener addAction = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                try {
                    double num1 = Double.parseDouble(num1Field.getText());
                    double num2 = Double.parseDouble(num2Field.getText());
                    double result = num1 + num2;
                    resultLabel.setText("結果: " + result);
                } catch (NumberFormatException ex) {
                    resultLabel.setText("結果: 輸入無效");
                }
            }
        };

        addButton.addActionListener(addAction);

        clearButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                num1Field.setText("");
                num2Field.setText("");
                resultLabel.setText("結果:");
            }
        });

        // 添加快捷鍵
        InputMap inputMap = panel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
        ActionMap actionMap = panel.getActionMap();
        inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "add");
        actionMap.put("add", new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent e) {
                addAction.actionPerformed(e);
            }
        });

        // 添加輸入驗證
        DocumentListener documentListener = new DocumentListener() {
            @Override
            public void insertUpdate(DocumentEvent e) {
                validateInput();
            }

            @Override
            public void removeUpdate(DocumentEvent e) {
                validateInput();
            }

            @Override
            public void changedUpdate(DocumentEvent e) {
                validateInput();
            }

            private void validateInput() {
                try {
                    Double.parseDouble(num1Field.getText());
                    Double.parseDouble(num2Field.getText());
                    addButton.setEnabled(true);
                } catch (NumberFormatException ex) {
                    addButton.setEnabled(false);
                }
            }
        };

        num1Field.getDocument().addDocumentListener(documentListener);
        num2Field.getDocument().addDocumentListener(documentListener);

        // 添加面板到窗口
        add(panel);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            Calculator calculator = new Calculator();
            calculator.setVisible(true);
        });
    }
}

在上面的代碼中,我們為“計算”按鈕添加了Enter鍵的快捷鍵。當用戶在輸入框中按下Enter鍵時,程序會執行加法操作。

3. 總結

通過本文的介紹,我們學習了如何使用Java的Swing庫來實現一個簡單的加法計算器。我們從創建主窗口開始,逐步添加輸入框、按鈕和事件監聽器,最終實現了一個功能完整的加法計算器。我們還通過輸入驗證、清空按鈕和鍵盤快捷鍵等功能進一步優化了用戶體驗。

希望本文能夠幫助你理解Java GUI編程的基本概念,并激發你進一步探索和開發更復雜的桌面應用程序。如果你有任何問題或建議,歡迎在評論區留言討論。

4. 完整代碼

以下是本文中實現的加法計算器的完整代碼:

”`java import javax.swing.; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import java.awt.; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent;

public class Calculator extends JFrame { private JTextField num1Field; private JTextField num2Field; private JLabel resultLabel;

public Calculator() {
    setTitle("加法計算器");
    setSize(300, 200);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLocationRelativeTo(null); // 居中顯示

    // 創建面板
    JPanel panel = new JPanel();
    panel.setLayout(new GridLayout(5, 2));

    // 添加組件
    panel.add(new JLabel("數字1:"));
    num1Field = new JTextField();
    panel.add(num1Field);

    panel.add(new JLabel("數字2:"));
    num2Field = new JTextField();
    panel.add(num2Field);

    JButton addButton = new JButton("計算");
    panel.add(addButton);

    JButton clearButton = new JButton("清空");
    panel.add(clearButton);

    resultLabel = new JLabel("結果:");
    panel.add(resultLabel);

    // 添加事件監聽器
    ActionListener addAction = new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            try {
                double num1 = Double.parseDouble(num1Field.getText());
                double num2 = Double.parseDouble(num2Field.getText());
                double result = num1 + num2;
                resultLabel.setText("結果: " + result);
            } catch (NumberFormatException ex) {
                resultLabel.setText("結果: 輸入無效");
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女